方法重载和空值

Pri*_*ian 11 c#

可能重复:
C#:将null传递给重载方法 - 调用哪个方法?

考虑以下两种方法:

void Method(object obj)  { Console.WriteLine("object"); }
void Method(int[] array) { Console.WriteLine("int[]"); }
Run Code Online (Sandbox Code Playgroud)

当我尝试打电话时:

Method(null);
Run Code Online (Sandbox Code Playgroud)

在Visual Studio 2008 SP1中,我得到了int[].

为什么是这样?

Ant*_*ram 11

它是重载分辨率的产物.你的论点null可以转换为objectint[].因此编译器选择最具体的版本,因为int[]它更具体object.

  • +1:"更具体"被定义为"an`int []`可以隐式地转换为`object`,但是`object`不能隐式地转换为`int []`." (5认同)