2009-07-28 46 views
4

我正在尋找一種超簡單的方式來生成數字列表,1-200。 (它可以是一個List,Array,Enumerable ...我並不關心具體的類型)簡單的序列生成?

顯然.Net 4.0有Sequence.Range(min,max)方法。 但我目前在.net 3.5上。

下面是一個示例用法,我之後用Sequence.Range顯示。

public void ShowOutput(Sequence.Range(1,200)); 

目前,我需要後綴數字1-200。在未來的迭代中,我可能需要任意的數字列表,所以我試圖保持設計的靈活性。

也許有一個很好的LINQ解決方案?任何其他想法?

回答

13

.NET 3,5也有Range。它實際上是Enumerable.Range並且返回IEnumerable<int>

您鏈接到的頁面已過時 - 它是在說「3」作爲「未來版本」,並且Enumerable靜態類在發佈之前的一個點被稱爲Sequence

如果你想實現它自己在C#2或更高版本,它很容易 - 這是一個:

IEnumerable<int> Range(int count) 
{ 
    for (int n = 0; n < count; n++) 
     yield return n; 
} 

你可以很容易地編寫其他方法進一步篩選器列表:

IEnumerable<int> Double(IEnumerable<int> source) 
{ 
    foreach (int n in source) 
     yield return n * 2; 
} 

但作爲您有3.5,您可以使用System.Linq.Enumerable中的擴展方法來執行此操作:

var evens = Enumerable.Range(0, someLimit).Select(n => n * 2); 
+0

您確實是對的。我沒有仔細閱讀。謝謝你讓我挺直。 – abelenky 2009-07-28 21:34:30

6
var r = Enumerable.Range(1, 200); 
3

結賬System.Linq.Enumerable.Range

關於你的問題的第二部分,你是什麼意思的「任意列表」?如果您可以定義從int到新值的函數,則可以使用Range與其他LINQ方法的結果:

var squares = from i in Enumerable.Range(1, 200) 
       select i * i;