这是我的代码:
public static class DynamicExtensions
public static void Add(this ExpandoObject obj, string path){
dynamic _obj = obj;
if (_obj == null) throw new ArgumentNullException("obj");
_obj.path = path;
}
}
但是当我以这种方式调用它时,出现“'System.Dynamic.ExpandoObject'不包含'Add'的定义”的错误:
dynamic obj = new ExpandoObject();
obj.Add("p1");
如何修复它?
提前致谢!
问题是使用dynamic
使用扩展方法 - 两者不能同时使用。这样就可以了:
ExpandoObject obj = new ExpandoObject();
obj.Add("p1");
...但只要dynamic
,没有扩展方法支持。
来自 C# 5 规范第 7.6.5.2 节:
在其中一种形式的方法调用(第 7.5.5.1 节)中
expr . identifier ( )
expr . identifier ( args )
expr . identifier < typeargs > ( )
expr . identifier < typeargs > ( args )
如果调用的正常处理没有找到适用的方法,则会尝试将该构造作为扩展方法调用进行处理。如果 expr 或任何参数具有编译时类型动态,则扩展方法将不适用。
虽然编译器could记住using
它必须检查以应用扩展方法的指令,但它只是没有 - 也许是出于性能原因,或者可能是因为它只是感觉需要做大量工作而收益相对较小。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)