3

BinaryWriterクラスを拡張して、リストをストリームに書き込めるようにしたい。複数の種類のリストでこれを実行したいと思います。このジェネリック関数を拡張機能として設定しました

public static void Write<T>(this BinaryWriter source, IEnumerable<T>items)
{
     foreach (T item in items)
          source.Write(item)//This doesn't work
} 

これは可能ですか?書き込みはすべての組み込み型を処理できることを私は知っています。Tを特定の型に制約する機能があることは知っていますが、intとdoubleではそれを行うことができませんでした。

int、double、bytesでのみ機能する必要があります。

4

2 に答える 2

5

Tを特定のタイプに制限する機能があることを私は知っています

残念ながら、コンパイラはTこれらのタイプの1つであるとは認識していないため、文句を言う必要があります。

int、double、bytesでのみ機能する必要があります。

次に、3つのオーバーロードを作成できます。

public static void Write(this BinaryWriter source, IEnumerable<int>items) {
    foreach (var item in items)
        source.Write(item);
}
public static void Write(this BinaryWriter source, IEnumerable<double>items) {
    foreach (var item in items)
        source.Write(item);
}
public static void Write(this BinaryWriter source, IEnumerable<byte>items) {
    foreach (var item in items)
        source.Write(item);
}
于 2012-08-18T03:03:01.107 に答える
2

dasblinkenlight の解決策はおそらく進むべき道ですが、ここに別の方法があります。

public static void Write(this BinaryWriter source, IEnumerable items)
{
     foreach (dynamic item in items)
          source.Write(item); //runtime overload resolution! It works!
}

の詳細については、ドキュメントdynamicを参照してください。

于 2012-08-18T03:06:22.260 に答える