无法用类型约束重载泛型方法[重复]
Posted
技术标签:
【中文标题】无法用类型约束重载泛型方法[重复]【英文标题】:Inability to overload generic methods with type constraints [duplicate] 【发布时间】:2012-02-19 03:14:12 【问题描述】:可能重复: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】:通用约束不是方法签名的一部分
看到这个答案Generic contraints on method overloads
Jon Skeet blog post on the topic
【讨论】:
此答案中提供的链接目前已损坏(截至 2015 年 4 月 26 日)。 @bostIT 嗯。我想知道 Jon 的博客发生了什么。我看看能不能找到更新的链接。 @bostIT 找到更新并修复链接 我个人认为泛型约束是愚蠢的,clr应该能够根据T自动找出语义。以上是关于无法用类型约束重载泛型方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章