方法重载和空值

11

可能是重复问题:
C#:将null传递给重载的方法,哪个方法被调用?

考虑以下两个方法:

void Method(object obj)  { Console.WriteLine("object"); }
void Method(int[] array) { Console.WriteLine("int[]"); }

当我尝试调用以下代码时:

Method(null);

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

为什么会这样?


3
他可能在询问编译器为何偏爱那个重载。 - Vlad
他的问题是为什么重载决议将null解析为使用int数组的方法,而不是使用对象的方法。 - Ben Robinson
1
请查看此问题:https://dev59.com/13RB5IYBdhLWcg3wF0HH - Jan
重复:https://dev59.com/13RB5IYBdhLWcg3wF0HH - Abdul Munim
2个回答

12

这是重载决议的一个产物。你的参数 null,可以转换为 objectint[] 两种类型。编译器因此选择了最具体的版本,因为 int[]object 更具体。


6
“更加具体”被定义为“一个 int[] 可以隐式转换为一个 object,但是一个 object 不能隐式转换为一个 int[]。” - StriplingWarrior

2
因为int[]比object更具体,所以具有object参数的方法将被忽略。如果您调用Method("Some string"),则会调用具有object参数的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接