简单序列生成?

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解决方案?还有其他想法吗?

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);

您说得确实没错。我没有仔细阅读。感谢您纠正我。 - abelenky
实际上,你的实现不正确。Enumerable.Range() 的形式为 Range(int start, int count),因此你的第二个参数应该是 count,而你的停止条件应该是 n < start + count - Robert Cartaino
没错。不过我已经稍微改变了示例(总是从零开始),这样你就可以使用Select为每个项目添加偏移量了-这就是正交性的一个例子。 - Daniel Earwicker

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接