5

我正在寻找一种超简单的方法来生成数字列表,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 解决方案?还有其他想法吗?

4

3 回答 3

16

.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);
于 2009-07-28T21:29:58.387 回答
6
var r = Enumerable.Range( 1, 200 );
于 2009-07-28T21:30:20.883 回答
3

查看System.Linq.Enumerable.Range

关于您问题的第二部分,“任意列表”是什么意思?如果您可以定义从 anint到新值的函数,则可以将 Range 的结果与其他 LINQ 方法一起使用:

var squares = from i in Enumerable.Range(1, 200)
              select i * i;
于 2009-07-28T21:30:24.970 回答