有哪些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
string[] array = new[] { "A", "B" }; // creates populated array of length 2
string[] array = ["A", "B"]; // creates populated array of length 2
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
var array = new[] { "A", "B" }; // created 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 }
在第一种情况下,大小可以是任何非负整数值,并且数组元素将初始化为默认值。int[] x = { 10, 20, 30 };
元素必须隐式转换为元素类型。大小是根据给定元素数确定的。
没有一个全能指南
我向您推荐C# 4.0规范,第7.6.10.4节"数组创建表达式"。
Array.CreateInstance(typeof(int), 3)
! - Jeffrey L Whitledge"1,2,3,4".split(',')
。 - Briannew int[,] { { 3, 7 }, { 103, 107 }, { 10003, 10007 }, };
,int[,,]
、int[,,,]
等也可以采用类似的��式。 - Jeppe Stig Nielsenvar 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({})
无法编译Enumerable.Repeat(String.Empty, count).ToArray()
将创建一个空字符串数组,重复“count”次。 如果您想使用相同但特殊的默认元素值初始化数组,请小心引用类型,所有元素将引用同一对象。
var arr1 = Enumerable.Repeat(new object(), 10).ToArray();
中,你会得到对同一对象的 10 个引用。要创建 10 个不同的对象,您可以使用 var arr2 = Enumerable.Repeat(/* dummy: */ false, 10).Select(x => new object()).ToArray();
或类似方法。 - Jeppe Stig Nielsenvar contacts = new[]
{
new
{
Name = " Eugene Zabokritski",
PhoneNumbers = new[] { "206-555-0108", "425-555-0001" }
},
new
{
Name = " Hanying Feng",
PhoneNumbers = new[] { "650-555-0199" }
}
};
如果您想要初始化一个固定长度的预先初始化的元素相等的数组(非null
或其他default
值),请使用以下代码:
在此情况下,您可以使用以下代码来初始化一个预先初始化的、具有相等元素的固定长度数组(元素必须是非null
或不同于default
值):
var array = Enumerable.Repeat(string.Empty, 37).ToArray();
请您也参与此次讨论。
下面是该类的定义。
public class DummyUser
{
public string email { get; set; }
public string language { get; set; }
}
你可以这样初始化数组:
private DummyUser[] arrDummyUser = new DummyUser[]
{
new DummyUser{
email = "abc.xyz@email.com",
language = "English"
},
new DummyUser{
email = "def@email.com",
language = "Spanish"
}
};
提示
以下数组:
string[] array = new string[2];
string[] array2 = new string[] { "A", "B" };
string[] array3 = { "A" , "B" };
string[] array4 = new[] { "A", "B" };
将被编译为:
string[] array = new string[2];
string[] array2 = new string[] { "A", "B" };
string[] array3 = new string[] { "A", "B" };
string[] array4 = new string[] { "A", "B" };
没有使用LINQ的重复操作:
float[] floats = System.Array.ConvertAll(new float[16], v => 1.0f);
int[] array = new int[4];
array[0] = 10;
array[1] = 20;
array[2] = 30;
或者
string[] week = new string[] {"Sunday","Monday","Tuesday"};
或者
string[] array = { "Sunday" , "Monday" };
Dim i, j As Integer
Dim strArr(1, 2) As String
strArr(0, 0) = "First (0,0)"
strArr(0, 1) = "Second (0,1)"
strArr(1, 0) = "Third (1,0)"
strArr(1, 1) = "Fourth (1,1)"
var
变量吗? - Ruben9922var x = {}
就毫无意义了,但我不知道什么是这种情况。所以,我猜测数组初始化器是一种语言特性。如果你将它与new List<string> {"A", "B"}
一起使用,它也会产生不同的结果。 - TvdHstring array = new string[] { "A", "B" };
而不是string array = { "A", "B" };
?第一个似乎多余了。 - LouDim a = { "A", "B" }
确实可以工作(使用Option Strict On和Option Infer On),并且正确地推断出String()
(在C#中为string[]
)作为数据类型,所以我猜C#设计者故意选择不支持这个。我想在VB中更容易实现,因为VB仅在数组初始化时使用花括号(与C#不同,在C#中你到处都可以看到花括号)。在VB中,您还可以编写Return {}
来返回一个数组的方法。 - Heinzistring[] arr = []
或List<string> list = []
附加链接 - undefined