异常的原因:
无法动态调度扩展方法。考虑转换动态参数或调用扩展方法而不使用扩展方法语法。
已经涵盖了几个SO问题(here和here)。但没有人说过为什么框架不允许这样做:
public static class ExampleExtension
{
public static string HelloWorld(this object o, object o2)
{
return "Hello World";
}
public static void Test()
{
dynamic dynamicObject = new object();
//Exception
new object().HelloWorld(dynamicObject);
//No Exception
ExampleExtension.HelloWorld(new object(), dynamicObject);
}
}
new object()。HelloWorld(dynamicObject)`不好
ExampleExtension.HelloWorld(new object(),dynamicObject)`很好
如果扩展方法基本上只是用于调用静态方法的语法糖,那么无论如何都不会将new object().HelloWolrd()
转换为编译器到ExampleExtension.HelloWorld(new object())
?那么为什么DLR
可以处理这个呢?