重载null歧义

Nea*_*hal 8 c# methods overloading

我有以下方法:

  void Method(string param1, string param2);
  void Method(string param1, object param2);
Run Code Online (Sandbox Code Playgroud)

当我使用以下方法调用该方法时:

  method("string", null);
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误,因为调用是模糊的,编译器不知道要调用哪个版本,因为两个方法都接受null作为第二个参数.

如何在不更改其中一个方法名称的情况下克服此问题?第一种方法永远不会有null.

pok*_*oke 15

的问题是,既stringobject可为空,所以null可以参考该方法的任一过载.你必须抛出空值 - 就像听起来一样愚蠢 - 明确地说要调用哪个超载.

method("string", (string) null);
method("string", (object) null);
Run Code Online (Sandbox Code Playgroud)

这基本上与定义任一类型的变量并传递的相同:

string param1 = null;
object param2 = null;

method("string", param1); // will call the string overload
method("string", param2); // will call the object overload
Run Code Online (Sandbox Code Playgroud)

这两个param1param2值相同,null但变量是不同类型的这就是为什么编译器能够准确的告诉它重载它需要使用.上面使用显式强制转换的解决方案是一样的; 它将一个类型注释为null值,然后用于推断正确的重载 - 只需要声明一个变量.