Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当返回类型为显式时,返回不同类型的方法之间的调用不明确_C#_Ambiguous Call - Fatal编程技术网

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

C# 当返回类型为显式时,返回不同类型的方法之间的调用不明确,c#,ambiguous-call,C#,Ambiguous Call,可能重复: 我有两种方法: TypeA MyMethod(string s) {} TypeB MyMethod(string s) {} 以下调用使我在方法和错误之间产生歧义: TypeA ta = MyMethod("some string"); 当我要求TypeA对象显式返回而不是通过var或其他方式返回时,这是如何发生的 TypeA和TypeB是独立的类,它们没有任何共同点。如果以这种方式调用方法,则不能重载返回类型 TypeA ta = MyMethod("some string

可能重复:

我有两种方法:

TypeA MyMethod(string s) {}
TypeB MyMethod(string s) {}
以下调用使我在方法和错误之间产生歧义:

TypeA ta = MyMethod("some string");
当我要求TypeA对象显式返回而不是通过var或其他方式返回时,这是如何发生的


TypeA和TypeB是独立的类,它们没有任何共同点。

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

TypeA ta = MyMethod("some string");
那么编译器显然会选择一个方法,但是如果用这种方式调用它会发生什么呢

MyMethod("some string");

如果未使用该方法返回的值,则编译器将无法选择要调用的适当方法,这就是为什么它是来自C spec v4.0第1.6.6节的不明确调用的原因:

方法的签名在包含 方法被声明。方法的签名由 方法、类型参数的数量以及修饰符的数量, 以及其参数的类型。方法的签名不存在 包括返回类型


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

因为函数接受一个字符串,并且它的名称相同,所以不明确。如何从这两个方法开始?你不应该那样超载。请给出一个简短但完整的示例,其中唯一无法编译的是对方法的调用。TypeA和TypeB将始终将Object作为公共基类。因为返回类型不是方法签名的一部分。@Hamlet是的,它是。IL支持它—C不支持。