Answers:
Enumerable.Range(0, 11);
生成指定范围内的整数序列。
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx
您可以创建一个简单的函数。这将适用于更复杂的序列。否则Enumerable.Range
应该做。
IEnumerable<int> Sequence(int n1, int n2)
{
while (n1 <= n2)
{
yield return n1++;
}
}
OddSequence
EvenSequence
其他自定义范围。if (++n1 % 2 == 0) yield return n1
, 例如。已经有几天了;)
在C#8.0中,您可以使用索引和范围
例如:
var seq = 0..2;
var array = new string[]
{
"First",
"Second",
"Third",
};
foreach(var s in array[seq])
{
System.Console.WriteLine(s);
}
// Output: First, Second
或者,如果您要创建,IEnumerable<int>
则可以使用扩展名:
public static IEnumerable<int> ToEnumerable(this Range range)
{
for (var i = range.Start.Value; i < range.End.Value; i++)
{
yield return i;
}
}
...
var seq = 0..2;
foreach (var s in seq.ToEnumerable())
{
System.Console.WriteLine(s);
}
// Output: 0, 1
PS但请注意“从末尾开始的索引”。例如,ToEnumerable扩展方法不适用于var seq = ^2..^0
。
原来在这里回答。
如果要枚举一个变量中的数字序列(IEnumerable<int>
),请尝试0
end
Enumerable.Range(0, ++10);
在说明中,要获得一个从0到10的数字序列,您希望该序列从0开始(记住0和10之间(包括0和10之间)有11个数字)。
如果需要无限的线性级数,可以编写如下函数
IEnumerable<int> Series(int k = 0, int n = 1, int c = 1)
{
while (true)
{
yield return k;
k = (c * k) + n;
}
}
你可以像这样使用
var ZeroTo1000 = Series().Take(11);
如果您想要一个函数,则可以重复调用以生成递增数字,也许您想要类似的东西。
using System.Threading;
private static int orderNumber = 0;
int Seq()
{
return Interlocked.Increment(ref orderNumber);
}
呼叫时Seq()
,它将返回下一个订单号并增加计数器。
我的代码中有这些功能
private static IEnumerable<int> FromZero(this int count)
{
if (count <= 0)
yield break;
for (var i = 0; i < count; i++)
{
yield return i;
}
}
private static IEnumerable<int> FromOne(this int count)
{
if (count <= 0)
yield break;
for (var i = 1; i <= count; i++)
{
yield return i;
}
}
这有助于减少一些for(i)代码。
IEnumerable<int>
,请包含call.ToArray()
。