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

eou*_*3hf 10 .net c# generics overloading c#-4.0

可能重复:
通用约束,其中T:struct和T:class

是否有一个特殊的原因是您不能在C#中使用互斥的类型约束来重载泛型方法?例如,采取以下方法:

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

T DoSomething<T>(T arg) where T : struct
{ /* Do something */ }
Run Code Online (Sandbox Code Playgroud)

并试着用它们来调用它们

DoSomething("1");
DoSomething(1);
Run Code Online (Sandbox Code Playgroud)

我看到它的方式,DoSomething()方法就它们将采用的参数是互斥的 - 第一个采用引用类型,第二个采用值类型.编译器应该能够告诉使用字符串参数的DoSomething调用转到第一个方法,并且使用int参数的DoSomething调用转到第二个方法.

我在遗传学上遗漏了一些概念吗?或者这只是一个未在C#中实现的功能?

asa*_*yer 8

通用约束不是方法签名的一部分

查看此答案关于方法重载的通用约束

关于这个主题的Jon Skeet博客文章