我有以下方法:
void Method(string param1, string param2);
void Method(string param1, object param2);
当我使用以下方法调用该方法时:
method("string", null);
它给出了一个错误,因为调用不明确,编译器不知道要调用哪个版本,因为两个方法都接受null
作为第二个参数。
如何在不更改其中一个方法名称的情况下克服此问题?第一种方法永远不会有null
。
答案 0 :(得分:15)
问题是string
和object
都可以为空,因此null
可以引用方法的重载。你必须抛出空值 - 就像听起来一样愚蠢 - 明确地说你要调用哪个超载。
method("string", (string) null);
method("string", (object) null);
这基本上与定义任一类型的变量并传递的相同:
string param1 = null;
object param2 = null;
method("string", param1); // will call the string overload
method("string", param2); // will call the object overload
param1
和param2
都具有相同的值null
,但变量的类型不同,这就是编译器能够确切地告诉它需要使用哪个重载的原因。上面使用显式强制转换的解决方案是一样的;它将类型注释为null
值,然后用于推断正确的重载 - 无需声明变量。
答案 1 :(得分:2)
您可以通过指定要传递的null类型来具体说明要调用的方法版本:
Method("string", null as string);