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
} 

这是可能吗?我知道 write 可以处理所有内置类型。我知道有能力将 T 限制为某些类型,但我无法为 int 和 double 做到这一点。

我只需要它来处理整数、双精度和字节。

4

2 回答 2

5

我知道有能力将 T 限制为某些类型

不幸的是,编译器不知道这T是其中一种类型,所以它不得不抱怨。

我只需要它来处理整数、双精度和字节。

然后可以进行三个重载:

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 回答