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

时间:2012-01-25 22:11:35

标签: c# .net generics c#-4.0 overloading

  

可能重复:
  Generic constraints, where T : struct and where T : class

是否有一个特殊的原因是您不能在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#中实现的功能?

1 个答案:

答案 0 :(得分:8)

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

请参阅此回答Generic contraints on method overloads

Jon Skeet blog post on the topic