可能重复:
关于 C# 中模糊调用的问题
我有这两种方法:
TypeA MyMethod(string s) {}
TypeB MyMethod(string s) {}
以下调用给了我“方法之间的歧义”错误:
TypeA ta = MyMethod("some string");
当我要求一个TypeA
对象显式返回而不是通过var
或以其他方式返回时,这是如何发生的?
TypeA
并且TypeB
是单独的类,它们没有任何共同点。
可能重复:
关于 C# 中模糊调用的问题
我有这两种方法:
TypeA MyMethod(string s) {}
TypeB MyMethod(string s) {}
以下调用给了我“方法之间的歧义”错误:
TypeA ta = MyMethod("some string");
当我要求一个TypeA
对象显式返回而不是通过var
或以其他方式返回时,这是如何发生的?
TypeA
并且TypeB
是单独的类,它们没有任何共同点。
从 C# 规范 v4.0,第 1.6.6 节:
方法的签名在声明该方法的类中必须是唯一的。方法的签名由方法的名称、类型参数的数量及其参数的数量、修饰符和类型组成。方法的签名不包括返回类型。
您有两个具有相同签名的方法,因为它们仅在返回类型上有所不同。这是不允许的。
如果您以这种方式调用方法,则不能重载返回类型
TypeA ta = MyMethod("some string");
那么编译器很明显可以选择一个方法。但是如果你以这种方式调用它会发生什么
MyMethod("some string");
你没有使用方法返回的值,那么编译器将无法选择合适的方法来调用,这就是为什么它是一个模棱两可的调用