无法用类型约束重载泛型方法
本文关键字:重载 泛型方法 约束 类型 | 更新日期: 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关于主题的博客文章