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[]
”