假设我有两个C#方法的重载版本:
void Method( TypeA a ) { }
void Method( TypeB b ) { }
Run Code Online (Sandbox Code Playgroud)
我用以下方法调用该方法:
Method( null );
Run Code Online (Sandbox Code Playgroud)
调用该方法的哪个重载?我该怎么做才能确保调用特定的重载?
取消注释下面标记的行将导致堆栈溢出,因为重载解析有利于第二种方法.但是在第二种方法的循环中,代码路径采用第一次重载.
这里发生了什么?
private static void Main(string[] args) {
var items = new Object[] { null };
Test("test", items);
Console.ReadKey(true);
}
public static void Test(String name, Object val) {
Console.WriteLine(1);
}
public static void Test(String name, Object[] val) {
Console.WriteLine(2);
// Test(name, null); // uncommenting this line will cause a stackoverflow
foreach (var v in val) {
Test(name, v);
}
}
Run Code Online (Sandbox Code Playgroud)