【问题标题】: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# 中未实现的功能?

【问题讨论】:

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

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


【解决方案1】:

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

看到这个答案Generic contraints on method overloads

Jon Skeet blog post on the topic

【讨论】:

  • 此答案中提供的链接目前已损坏(截至 2015 年 4 月 26 日)。
  • @bostIT 嗯。我想知道 Jon 的博客发生了什么。我看看能不能找到更新的链接。
  • @bostIT 找到更新并修复链接
  • 我个人认为泛型约束是愚蠢的,clr应该能够根据T自动找出语义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 2012-06-05
  • 1970-01-01
相关资源
最近更新 更多