【问题标题】:C# Create Const Array with multiple values at onceC#一次创建具有多个值的常量数组
【发布时间】:2020-04-01 21:40:34
【问题描述】:

我有如下课程;

public class PhoneNumbersDto
{            
 public string code { get; set; }
 public int dial { get; set; }
 public string mask { get; set; }
 public string name { get; set; }
}

我有如下价值观;

 {
    "code": "TR",
    "dial": 90,
    "mask": "### ### ## ##",
    "name": "Turkey"
  },
  {
    "code": "TM",
    "dial": 993,
    "mask": "## ######",
    "name": "Turkmenistan"
  },
  {
    "code": "TC",
    "dial": 1649,
    "mask": "### ####",
    "name": "Turks & Caicos Islands"
  }

我想用 TheseClassType 创建一个静态 const 数组,但我无法初始化它。

有没有办法一次创建具有多个值的静态或常量数组。

谢谢

【问题讨论】:

  • 为什么不能初始化它们?有什么错误吗?有什么例子吗?
  • 我创建了一个静态数组,但只有一项。但我不能一次创建多个数组。我找不到孤子,也许我不好搜索解决方案。

标签: c# arrays static


【解决方案1】:
    public static readonly PhoneNumbersDto[] array =
    {
        new PhoneNumbersDto()
        {
            code = "TR",
            dial = 90,
            mask = "### ### ## ##",
            name = "Turkey"
        },
        new PhoneNumbersDto()
        {
            code = "TM",
            dial = 993,
            mask = "## ######",
            name = "Turkmenistan"
        },
        new PhoneNumbersDto()
        {
            code = "TC",
            dial = 1649,
            mask = "### ####",
            name = "Turks & Caicos Islands"
        }
    }; 

正如@eocron 所说,初始化可以工作;上面是一个例子。虽然为了更好的风格,我建议你使用一个构造函数来接受这四个输入,而不是显示的风格。

readonly 用于代替const - 您只能将编译时项声明为常量。 readonly 只是意味着您不能编辑对该数组的引用。

【讨论】:

  • 为了完整起见,应该指出数组元素可以改变,即使数组引用本身不能。如果需要完全不变性,则应使用ReadOnlyCollection<PhoneNumbersDto> 或类似类型(可以从此处显示的表达式初始化,除非您需要显式的new)。
  • @madreflection:绝对正确。这里可以进行很多设计改进,包括首先决定这是一个静态字段。也许返回 ReadOnlyCollection 的方法可能会更好。希望这是朝着正确方向迈出的一步。
  • 更多的是关于信息(答案)的改进,而不是与设计有关的任何事情。你说“你不能编辑对这个数组的引用”,你是对的,但是新手可能会错误地认为该语句扩展到数组元素。因此,为了防止该假设持续超过该陈述,最好指出其中的差异。
猜你喜欢
  • 2015-01-19
  • 1970-01-01
  • 2016-04-16
  • 2012-08-23
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多