【发布时间】:2014-01-27 22:23:37
【问题描述】:
我有以下方法:
void Method(string param1, string param2);
void Method(string param1, object param2);
当我使用以下方法调用该方法时:
method("string", null);
它给了我一个错误,因为调用不明确,编译器不知道要调用哪个版本,因为这两种方法都接受null 作为第二个参数。
如何在不更改其中一个方法名称的情况下克服这个问题?第一种方法永远不会有null。
【问题讨论】:
-
两者都可以肯定有null;但是使用 null 调用特定变量的一种简单方法是创建特定类型的 null 变量。
-
尝试这样称呼它:method("string", (string)null);或方法(“字符串”,(对象)空);
-
您使用的是哪个版本的 .NET。因为没有歧义。规范对重载分辨率非常明确。
-
正如@HamletHakobyan 所说,您的示例不应导致歧义。那是因为每个
string都是object,但不是每个object都是string,所以它不是对称的,在这种情况下“最具体”的重载,这里Method(string, string)是首选。你的真实情况可能不同。例如,如果重载是Method(string, string)和Method(string, Uri),它会不明确。
标签: c# methods overloading