c# - 使用泛型变量作为参数调用重载函数

标签 c# generics extension-methods type-constraints

我想扩展 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 这样做。

我只需要它来处理整数、 double 和字节数。

最佳答案

I know there is the ability to constrain T to certain types

不幸的是,编译器不知道 T 是这些类型之一,所以它不得不提示。

I only need it to work for ints, doubles, and bytes.

然后你可以进行三个重载:

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);
}

关于c# - 使用泛型变量作为参数调用重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12015459/

相关文章:

c# - 并行编程竞争条件

c# - 在 ASP.NET Core 中设置 Entity Framework

c# - 在 Geckofx 中更改屏幕分辨率信息

swift - 如何反转 Swift 扩展中的链表?

c# - 有没有办法使用 C# 创建 Azure AD B2C 实例?

c# - 使用泛型装箱和拆箱

c# - 泛型异常

java - java泛型中的无限嵌套

asp.net-mvc-3 - 滚动我自己的@Html.BeginfOrm()

.net - EF 代码首先从 IQueryable<T> 中删除批处理?