当有人写道:
string[] ArrayofStrings = new string[3]
幕后真的发生了什么?就像foreach是用于移动ienunerator的语法糖一样,这是相似的吗?
答案 0 :(得分:1)
我可能会误解你,所以请随时要求澄清。
字符串是字符本身的数组,所以基本上你有一个数组的数组。
现在,数组本身就是集合,您可以在其中提供对第一个元素(标记为0)的引用,以及在第一个元素之后还有多少元素。在你的情况下,你有3(从0到2)。您可以通过告诉第一个元素的差异来索引它们,因为这些元素在内存中彼此相邻。
所以你有一个字符数组,意思是string
,它是ArrayOfStrings
的一个元素,它本身也是一个数组。
答案 1 :(得分:1)
string[] ArrayofStrings = new string[3]
只是意味着:
我想要一个名为ArrayofStrings的变量 - 我想要 它有三个元素,所有元素都是空字符串。
这不是真正的语法糖吗?例如。
对于其他一些初始化数组的方法,请给https://stackoverflow.com/a/5678244/34092一个读数。
答案 2 :(得分:1)
是的,有一些语法糖:
string[] ArrayofStrings = new string[3]
首先,基类库类型string
有C#别名System.String
。 [我讨厌它。]
其次,数组构造函数看起来不像其他构造函数。没有特殊的语法,你必须写:
string[] ArrayofStrings2 = (string[])Array.CreateInstance(typeof(string), 3);
正如您可以在LINQPad或ildasm中轻松看到的那样,这两个陈述不会发出相同的IL。第一种方式叫
newarr System.String
第二个通过
执行此操作call System.Array.CreateInstance
castclass System.String[]
(我认为如果C#语言没有那个语法 - 糖,C#编译器会做一些编译器魔法并发出第一个IL而不是第二个。)
但是,正如@mjwills指出的那样,其他初始化表达式可能更完整,因为您想要一个空数组是值得怀疑的。