これは、連続したリストを生成するためのクリーンで正しい方法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()
は、ループするたびに完全なリストを再作成する必要がないようにするためです。(OK、1000 uints は大したことではありませんが、それが原則です。それらがクラスである場合、毎回新しいクラスを作成し、変更が失われるなどの予期しない結果が得られます)
EDIT2
実行時
にCast<uint>()
機能しません(「指定されたキャストは無効です」)。.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);
}
}
補足: アプリケーションでパフォーマンスが重要なポイントである場合は、次の質問を読むことができます。(特に回答としてマークされた回答)