可能重复:
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#中没有实现的一个特性?