这是一种生成连续uints
列表的简洁方法吗?
演员看起来有些丑陋,但我是初学者......可能有一种方法没有施展?
public class Test
{
static readonly IEnumerable<uint> AvailableChannels
= (IEnumerable<uint>)Enumerable.Range(1,1000);
}
答案 0 :(得分:8)
static readonly IEnumerable<uint> AvailableChannels
= Enumerable.Range(1,1000)
.Select(i => (uint)i)
.ToList();
它仍然是演员...
修改强>
.ToList()
是这样的,每次循环时都不需要重新创建完整列表。 (好吧,1000个uint并不多,但这是它的原则 - 如果它们是类,你每次都会创建新的并获得意想不到的结果,比如丢失的变化)
<强> EDIT2 强>
Cast<uint>()
在运行时不起作用(“指定的强制转换无效”)。已更改为.Select
以执行演员。
答案 1 :(得分:7)
您可以编写自己的可枚举方法:
public static IEnumerable<uint> Foo(
uint startValue =0,
uint maxValue = uint.MaxValue
)
{
uint index = startValue;
while(index < maxValue) {
yield return index++;
}
}
public static void Main()
{
var myUints = Foo().Take(100);
var myUints2 = Foo(startValue:0, maxValue:1000);
var myUints3 = Foo(0, 1000);
foreach(uint x in myUints) {
Console.WriteLine(x);
}
}
附注:如果性能是您应用程序中的关键点,您可以阅读以下问题:Why is Enumerable.Range faster than a direct yield loop?(特别是标记为答案的答案)