C# 简单序列生成?
我正在寻找一种非常简单的方法来生成数字列表,1-200。 (它可以是列表、数组、可枚举……我并不真正关心具体的类型) 显然.NET4.0有一个方法。 但我现在在.NET3.5上 下面是我所追求的示例用法,以Sequence.Range显示C# 简单序列生成?,c#,linq,sequence,C#,Linq,Sequence,我正在寻找一种非常简单的方法来生成数字列表,1-200。 (它可以是列表、数组、可枚举……我并不真正关心具体的类型) 显然.NET4.0有一个方法。 但我现在在.NET3.5上 下面是我所追求的示例用法,以Sequence.Range显示 public void ShowOutput(Sequence.Range(1,200)); 目前,我需要消费数字1-200。在未来的迭代中,我可能需要任意的数字列表,所以我试图保持设计的灵活性 也许有一个好的LINQ解决方案?还有其他想法吗?.NET3,5
public void ShowOutput(Sequence.Range(1,200));
目前,我需要消费数字1-200。在未来的迭代中,我可能需要任意的数字列表,所以我试图保持设计的灵活性
也许有一个好的LINQ解决方案?还有其他想法吗?.NET3,5也有
范围。它实际上是并返回IEnumerable
你链接到的页面已经过时了-它说3是“未来版本”,而可枚举的
静态类在发布之前的某个点被称为序列
如果您想自己在C#2或更高版本中实现它,这很容易——这里有一个:
IEnumerable<int> Range(int count)
{
for (int n = 0; n < count; n++)
yield return n;
}
退房
关于你问题的第二部分,“任意列表”是什么意思?如果可以定义从int
到新值的函数,则可以将Range的结果与其他LINQ方法一起使用:
var squares = from i in Enumerable.Range(1, 200)
select i * i;
你确实是对的。我读得不够仔细。谢谢你帮我澄清。事实上,你的实现是不正确的Enumerable.Range()
的格式为Range(int start,int count)
,因此第二个参数应该是“count
”,停止条件应该是n
。这是正确的。我已将示例更改为略有不同(始终从零开始),因为您可以使用Select
为每个项目添加偏移量-正交性示例。
var evens = Enumerable.Range(0, someLimit).Select(n => n * 2);
var r = Enumerable.Range( 1, 200 );
var squares = from i in Enumerable.Range(1, 200)
select i * i;