C# 方法重载和空值

C# 方法重载和空值,c#,C#,可能重复: 考虑以下两种方法: void Method(object obj) { Console.WriteLine("object"); } void Method(int[] array) { Console.WriteLine("int[]"); } 当我试着打电话时: Method(null); 在VisualStudio2008SP1中,我得到int[] 为什么会这样?这是过载解决方案的产物。您的参数null,可以同时转换为object和int[]。因此,编译器选择最具体的版

可能重复:

考虑以下两种方法:

void Method(object obj)  { Console.WriteLine("object"); }
void Method(int[] array) { Console.WriteLine("int[]"); }
当我试着打电话时:

Method(null);
在VisualStudio2008SP1中,我得到
int[]


为什么会这样?

这是过载解决方案的产物。您的参数
null
,可以同时转换为
object
int[]
。因此,编译器选择最具体的版本,因为
int[]
object

更具体,因为int[]比object更具体,带有object参数的方法将被忽略。如果要调用Method(“Some string”),则将调用带有object参数的方法。

他可能会问编译器为什么喜欢这种重载。他的问题是,为什么重载解析将null解析为采用int数组的方法,而不是采用object的方法。请参阅此问题:Duplicate:+1:“更具体”定义为“一个
int[]
可以隐式转换为一个
对象
,但是一个
对象
不能隐式转换为一个
int[]