所有可能的数组初始化语法

C#中可能的所有数组初始化语法是什么?


这些是简单数组的当前声明和初始化方法。

string[] array = new string[2]; // creates array of length 2, default values
string[] array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2

请注意,还有其他获取数组的技术,例如IEnumerable<T>上的Linq ToArray()扩展。

还要注意,在上面的声明中,前两个可以用var (C#3+)替换左侧的string[] ,因为右侧的信息足以推断出正确的类型。 第三行必须按照显示进行编写,因为单独的数组初始化语法不足以满足编译器的要求。 所以如果你把整个简短的事情都写进去,上面的内容可以写成

var array = new string[2]; // creates array of length 2, default values
var array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2

C#中表达式的数组创建语法是:

new int[3]
new int[3] { 10, 20, 30 }
new int[] { 10, 20, 30 }
new[] { 10, 20, 30 }

在第一个中,大小可以是任何非负整数值,并且数组元素被初始化为默认值。

在第二个中,大小必须是一个常数,给定的元素数量必须匹配。 必须存在从给定元素到给定数组元素类型的隐式转换。

在第三个元素中,元素必须可以隐式转换为元素类型,大小由给定元素的数量确定。

在第四种情况下,数组元素的类型是通过计算所有具有类型的给定元素中的最佳类型(如果有的话)来推断的。 所有元素都必须隐式转换为该类型。 大小由给定元素的数量决定。 这个语法是在C#3.0中引入的。

还有一种语法只能在声明中使用:

int[] x = { 10, 20, 30 };

元素必须隐式转换为元素类型。 大小由给定元素的数量决定。

没有一个一对一的指南

我将您引用到C#4.0规范,第7.6.10.4节“阵列创建表达式”。


非空数组

  • var data0 = new int[3]

  • var data1 = new int[3] { 1, 2, 3 }

  • var data2 = new int[] { 1, 2, 3 }

  • var data3 = new[] { 1, 2, 3 }

  • var data4 = { 1, 2, 3 }不可编译。 改用int[] data5 = { 1, 2, 3 }

  • 空阵列

  • var data6 = new int[0]
  • var data7 = new int[] { }
  • var data8 = new [] { }int[] data9 = new [] { }不可编译。

  • var data10 = { }不可编译。 改用int[] data11 = { }

  • 作为一种方法的论据

    只有可以使用var关键字分配的表达式才能作为参数传递。

  • Foo(new int[2])
  • Foo(new int[2] { 1, 2 })
  • Foo(new int[] { 1, 2 })
  • Foo(new[] { 1, 2 })
  • Foo({ 1, 2 })不可编译
  • Foo(new int[0])
  • Foo(new int[] { })
  • Foo({})不可编译
  • 链接地址: http://www.djcxy.com/p/40241.html

    上一篇: All possible array initialization syntaxes

    下一篇: Convert boolean to int in Java