2009-07-28 87 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;