c# - 基于泛型约束的方法重载?

标签 c# generics

我能否以某种方式拥有仅因泛型类型约束而不同的重载方法?

这不编译:

    void Foo<T>(T bar) where T : class
    {

    }

    void Foo<T>(T bar) where T : struct
    {

    }

由于这些是“开放”方法,当在代码中使用具体类型的 T 引用实际方法时,实际方法应该是封闭的/构造的/完全定义的,然后就会清楚是哪个过载调用。

显而易见的解决方案是不要重载它们,但我想知道为什么这在 C# 中不起作用?

附加问题:如果这只是一个 C# 编译器约束,IL 是否允许这样的重载?

最佳答案

Can I somehow have overloaded methods which differ only by generic type constraints?

没有。就重载而言,它不是方法签名的一部分,就像返回类型不是一样。

horrible在某些情况下“伪重载”的方式,但我不建议走这条路。

更多信息,您可能想阅读:

关于c# - 基于泛型约束的方法重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12529966/

相关文章:

c# - 从 C# 程序访问 DLL 中的方法

java - 泛型类和通配符的上限

c# - 为什么 List<T> 在协变接口(interface) MyInterface<out T> 上无效

java - 如何在JAVA中使用参数化构造函数制作类的未定义长度的对象数组?

java - 在 Java 中,是否可以创建类型安全的类映射到其类的实例?

java - 有没有办法减少多个类型参数?

c# - 使用 EPPlus 在 Excel 中插入一行

c# - 从 WCF 请求中删除 nill ="True"

c# - gridview 中的数据源变为 null

c# - 异步编程中的悬挂等待和可能的内存泄漏