当返回类型是显式的时,在返回不同类型的方法之间调用不明确

时间:2012-11-30 18:24:13

标签: c# ambiguous-call

  

可能重复:
  Question about ambiguous calls in C#

我有这两种方法:

TypeA MyMethod(string s) {}
TypeB MyMethod(string s) {}

以下调用给出了我"方法之间的歧义"错误:

TypeA ta = MyMethod("some string");

当我要求TypeA对象明确返回而不是通过var或其他方式返回时,会发生什么情况?


TypeATypeB是不同的类,他们没有任何共同之处。

2 个答案:

答案 0 :(得分:11)

从C#规范v4.0开始,第1.6.6节:

  

方法的签名在其中的类中必须是唯一的   方法被声明。方法的签名由名称组成   方法,类型参数的数量和数量,修饰符,   及其参数的类型。方法的签名没有   包括返回类型。

您有两种具有相同签名的方法,因为它们仅在返回类型上有所不同。这是不允许的。

答案 1 :(得分:1)

如果以这种方式调用方法,则不能重载返回类型

TypeA ta = MyMethod("some string");

那么编译器选择一个方法是显而易见的。但是如果以这种方式调用它会发生什么

MyMethod("some string");

你没有使用该方法返回的值,那么编译器将无法选择适当的方法来调用,这就是为什么它是一个模糊的调用