可以在编译时创建一个数组,如;
int[] myValues = new int[] { 1, 2, 3 } ;
但我想做这样的事情;
List<int> myValues = new List<int>() { 1, 2, 3 };
编译器说没有。有没有办法在不使用LINQ(C#3.0)的情况下执行此操作(C#2.0)?
答案 0 :(得分:48)
List<int> myValues = new List<int>(new int[] { 1, 2, 3 } );
这将创建一个中间数组,但是可能有更有效的方法来做同样的事情。
编辑:
John Feminella建议创建一个工厂方法来接受参数列表并返回一个List,您可以按如下方式实现:
List<T> CreateList<T>(params T[] values)
{
return new List<T>(values);
}
您可以使用如下:
List<int> myValues = CreateList(1, 2, 3);
答案 1 :(得分:33)
var list = Enumerable.Range(1,3).ToList();
答案 2 :(得分:4)
你建议的方式最初是在C#3.0中引入的(与LINQ无关,它是引入的语言功能)。
C#2.0中没有“快捷方式”(列表初始化)可以做到这一点,无论是新增列表,然后通过myValues.Add手动添加数字,或者您可以执行以下操作:
int[] arrMyValues = new int[] {1, 2, 3};
List<int> myValues = new List<int>(arrMyValues);
T的列表可以在它的构造函数中包含一个IE的数量,其中它将包含创建的列表中的IEnumerable中的所有T,看作int []实现T的IEnumerable,你可以“混合和匹配”这些特性像这样。
除此之外,在C#2.0中没有办法做你所描述的事情。
答案 3 :(得分:3)
集合初始值设定项只是语法糖,因此如果使用3.0编译器进行编译,则可以在针对2.0的应用程序中使用它们。
答案 4 :(得分:1)
您也可以使用System.Linq.Enumerable:
这样做int[] categories = { 221, 222, 223, 224, 225, 226, 227, 228, 235, 236, 254, 255, 256 };
var ticketsToProcess = categories.ToList();