无法用类型约束重载泛型方法

本文关键字:重载 泛型方法 约束 类型 | 更新日期: 2023-09-27 18:21:21

可能重复:
通用约束,其中T:结构,其中T:类

您不能在C#中使用互斥类型约束来重载泛型方法,这有什么特别的原因吗?例如,采用以下方法:

T DoSomething<T>(T arg) where T : class
{ /* Do something */ }
T DoSomething<T>(T arg) where T : struct
{ /* Do something */ }

并尝试用调用它们

DoSomething("1");
DoSomething(1);

在我看来,DoSomething()方法在参数方面是互斥的——第一个方法采用引用类型,第二个方法采用值类型。编译器应该能够判断带有字符串参数的DoSomething调用将转到第一个方法,带有int参数的DoSomething呼叫将转到第二个方法。

这里的泛型在概念上有遗漏吗?或者这只是C#中没有实现的一个特性?

无法用类型约束重载泛型方法

泛型约束不是方法签名的一部分

见此答案方法的一般限制重载

Jon Skeet关于主题的博客文章