2009-10-14 24 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