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

10

可能重复:
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 调用应该使用第一个方法,而带有整数参数的 DoSomething 调用则应该使用第二个方法。
我是否在泛型方面有什么概念上的错误?还是这只是C#中没有实现的一个特性?

1
这个重复的文本可以通过添加指向重复答案的链接来改进。如果您找不到解决方案并且搜索没有返回任何结果,或者返回了太多结果,那么这真的很令人沮丧。 - John Paquin
1个回答

10

此答案中提供的链接目前已失效(截至2015年4月26日)。 - devinbost
@bostIT 嗯,我不知道Jon的博客发生了什么事。我会看看能否找到更新的链接。 - asawyer
@bostIT 找到了更新并修复了链接。 - asawyer
我个人认为通用约束很愚蠢,CLR应该能够根据T自动推断语义。 - Jay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接