Here is my code:
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;
}
}
But I got the error of "'System.Dynamic.ExpandoObject' does not contain a definition for 'Add'", when I call it in this way:
dynamic obj = new ExpandoObject();
obj.Add("p1");
How to fix it?
Thanks in advance!
Dynamic explicitly excludes extension methods. This is because the method is resolved at run time, not compile time. To resolve the method call correctly, the DLR would need information about the call that includes which using directives are in force; there's no mechanism to do that. See this answer by Eric Lippert for more detail: https://stackoverflow.com/a/5313149/385844
You can, of course, call the method using the static method call syntax:
The problem is using
dynamic
with extension methods - the two just don't go together. This would be fine:... but with just
dynamic
, there's no extension method support.From section 7.6.5.2 of the C# 5 spec:
While the compiler could remember the
using
directives which it would have to check to apply extension methods, it just doesn't - perhaps for performance reasons, or perhaps because it was just felt to be a lot of work for relatively little benefit.