2009-10-14 48 views
2

与LINQ单排列我有这样的代码:C#创建

List<int> list = new List<int>(); 
for (int i = 1; i <= n; i++) 
    list.Add(i); 

我能创造这一个List<int>与LINQ线?

回答

20
List<int> list = Enumerable.Range(1, n).ToList(); 
12
List<int> list = Enumerable.Range(1, n).ToList(); 
3

如果你需要很多的名单,你会发现下面的扩展方法有用:

public static class Helper 
{ 
    public static List<int> To(this int start, int stop) 
    { 
     List<int> list = new List<int>(); 
     for (int i = start; i <= stop; i++) { 
      list.Add(i); 
     } 
     return list; 
    } 
} 

使用方法如下:

var list = 1.To(5); 

当然,对于一般情况,其他人发布的Enumerable.Range事物可能更多,但我想我会分享这个;) You c下次您的Ruby爱好者会说明详细的C#与Enumerable.Range的用法。

+0

如果你正在定义这样的通用扩展方法,为什么不让它返回'IEnumerable '而不是'List '?范围几乎无处不在的已建立的惯例是他们懒惰。 – 2009-10-14 16:19:56

+0

因为它被要求提供列表,而不是IEnumerable 。我只是把这个问题写成这个问题作为一个普通的例子,如何缩短这个问题。为了炫耀你的Ruby同事,你会想避免额外的ToList调用;)当然,如果你认为这个方法值得成为一个通用的方法,那就让它返回IEnumerable 。这甚至应该允许你将它变成一个迭代器块,而不是手动创建列表。 – OregonGhost 2009-10-14 16:26:02

+0

@Pavel:因为这正是'Enumerable.Range'的作用。 – 2009-10-14 16:46:16