SO是一场狗屎秀。感谢您的搭车。
不。如果没有
dynamic
关键字,C# 中的所有方法绑定都是在编译时完成的——甚至绑定到隐式转换运算符。这意味着您在方法重载解析中遇到的问题也会阻止编译器确定您是否希望将 null
隐式转换为 T1 还是 T2。并且使用 dynamic
不起作用,因为 null
在运行时没有任何类型。
如果您可以分享更多信息,您的问题可能还有其他解决方案。例如,如果两种方法中的任何一种在传递空值时都可以正常工作,并且您只是尝试编译生成的代码,则可以创建如下方法:
foo(object o) {return Foo((T1)null);}
然后将呼叫翻译为:
foo(new object());
如果您想使用
Null
类而不是 object
,上述方法也适用——无需隐式强制转换。
另一方面,如果使用空值调用哪个重载确实重要,那么您需要告诉我们原始程序如何确定要调用哪个重载。