3

これは、連続したリストを生成するためのクリーンで正しい方法uintsですか?

キャストはちょっと醜いですが、私は初心者です...キャストせずに方法があるのではないでしょうか?

public class Test
{
    static readonly IEnumerable<uint> AvailableChannels 
         = (IEnumerable<uint>)Enumerable.Range(1,1000);
}
4

2 に答える 2

8
static readonly IEnumerable<uint> AvailableChannels 
     = Enumerable.Range(1,1000)
       .Select(i => (uint)i)
       .ToList();

キャストはまだですが…

編集
これ.ToList()は、ループするたびに完全なリストを再作成する必要がないようにするためです。(OK、1000 uints は大したことではありませんが、それが原則です。それらがクラスである場合、毎回新しいクラスを作成し、変更が失われるなどの予期しない結果が得られます)

EDIT2
実行時 にCast<uint>()機能しません(「指定されたキャストは無効です」)。.Selectキャストを実行するために変更されました。

于 2012-12-10T13:56:22.793 に答える
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);
    }
}

補足: アプリケーションでパフォーマンスが重要なポイントである場合は、次の質問を読むことができます。(特に回答としてマークされた回答)

于 2012-12-10T13:57:45.553 に答える