可以在编译时创建数组,例如:
int[] myValues = new int[] { 1, 2, 3 } ;
但我想做类似这样的事情:
List<int> myValues = new List<int>() { 1, 2, 3 };
编译器说 No。有没有不使用 LINQ(C#3.0)的方法来完成这个问题(C#2.0)?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);
Patrick已经给出了你要找的答案。但是我想再补充一点。如果你想处理更长的数字范围并且不想手动输入,可以考虑使用Enumerable.Range方法。它可以在运行时生成一系列连续的数字。例如,你的示例可以按如下方式编写:
var list = Enumerable.Range(1,3).ToList();
int[] arrMyValues = new int[] {1, 2, 3};
List<int> myValues = new List<int>(arrMyValues);
List of T可以在其构造函数中接受一个IEnumerable of T,其中它将包括在创建的列表中的该IEnumerable中的所有T,因为int[]实现了IEnumerable of T,您可以像这样“混合和匹配”功能。
除此之外,在C# 2.0中没有办法做到你所描述的这种事情。
你也可以这样做,使用 System.Linq.Enumerable:
int[] categories = { 221, 222, 223, 224, 225, 226, 227, 228, 235, 236, 254, 255, 256 };
var ticketsToProcess = categories.ToList();