在.NET中使用整数填充列表的更简单方法

95 .net c# linq list

可能重复:
在.NET中填充整数列表

是否有一种更简单或更优雅的方法来初始化C#中的整数列表?

List<int> numberList = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Run Code Online (Sandbox Code Playgroud)

要么

for(int i = 1; i <= 10; i++)
{
    numberList.Add(i);
}
Run Code Online (Sandbox Code Playgroud)

它似乎不太实际 - 特别是如果列表包含大量值.循环是一个更实用的解决方案吗?

谢谢,

CC

Rio*_*ams 193

您可以利用以下Enumerable.Range()方法:

var numberList = Enumerable.Range(1, 10).ToList();
Run Code Online (Sandbox Code Playgroud)

第一个参数是从头开始的整数,第二个参数是要包含多少个连续整数.

  • LINQ是一个非常非常强大的小怪物.:) (12认同)
  • 我也*那么*试图在那里打一个`var`; p (8认同)
  • Linq将使用_any_ .NET语言,包括VB.NET. (4认同)
  • @DanielMann:不,LINQ 是 [类似于 SQL 的语法](http://msdn.microsoft.com/en-us/library/bb397897.aspx)。很少有人使用它,几乎每个人都只是直接调用扩展方法,以至于人们甚至忘记了查询语法的存在。此答案不使用 LINQ,并且 `Range` 不是扩展方法(`ToList` 是)。 (2认同)

jas*_*son 41

如果你的初始化列表是从值的连续序列一样简单fromend,你可以说

var numbers = Enumerable.Range(from, end - from + 1)
                        .ToList();
Run Code Online (Sandbox Code Playgroud)

如果你的初始化列表是一些更复杂的,可以由映射定义f来自intint,你可以说

var numbers = Enumerable.Range(from, end - from + 1)
                        .Select(n => f(n))
                        .ToList();
Run Code Online (Sandbox Code Playgroud)

例如:

var primes = Enumerable.Range(1, 10)
                       .Select(n => Prime(n))
                       .ToList();
Run Code Online (Sandbox Code Playgroud)

将生成前十个质数假设PrimeFunc<int, int>,它接受一个int n并返回n次总理.

  • 它确实提供了一个主要区别,因为当范围的起始不是0但是任何大于零时. (2认同)