这是生成连续列表的干净正确方法uints
吗?
演员表看起来有点难看,但我是初学者……可能有一种方法不用四处转换?
public class Test
{
static readonly IEnumerable<uint> AvailableChannels
= (IEnumerable<uint>)Enumerable.Range(1,1000);
}
这是生成连续列表的干净正确方法uints
吗?
演员表看起来有点难看,但我是初学者……可能有一种方法不用四处转换?
public class Test
{
static readonly IEnumerable<uint> AvailableChannels
= (IEnumerable<uint>)Enumerable.Range(1,1000);
}
static readonly IEnumerable<uint> AvailableChannels
= Enumerable.Range(1,1000)
.Select(i => (uint)i)
.ToList();
虽然它仍然是一个演员...
编辑
是这样
,.ToList()
每次循环遍历它时都不需要重新创建完整列表。(好吧,1000 个 uint 并不多,但它的原理是——如果它们是类,你每次都会创建新的类并得到意想不到的结果,比如丢失的更改)
EDIT2
在Cast<uint>()
运行时不起作用(“指定的演员表无效”)。更改为 a.Select
以执行演员表。
您可以编写自己的可枚举方法:
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);
}
}
附注:如果性能是您的应用程序中的一个关键点,您可能会阅读这个问题:为什么 Enumerable.Range 比直接 yield 循环快?(尤其是标记为答案的答案)