Cannot assign value to ExpandoObject

1.4k Views Asked by At

Just trying out on dynamic objects and I encountered this compile error

ExpandoObject myObj = new ExpandoObject();
myObj.GivenName = "Testing";

System.Dynamic.ExpandoObject' does not contain a definition for 'GivenName' and no extension method 'GivenName' accepting a first argument of type 'System.Dynamic.ExpandoObject' could be found

Looking at MSDN: ExpandoObject, they actually did it differently - using dynamic keyword

dynamic myObj = new ExpandoObject();
myObj.GivenName = "Testing";

What is the explanation for this? And is it possible to still assign values on the instance of myObj without using dynamic keyword? I looked if it has .SetProperty but no.

Thanks

Update

Now I understand I have to use dynamic keyword, but what use is this line if it's allowed

ExpandoObject myObj = new ExpandoObject();
2

There are 2 best solutions below

0
On

You need to declare the variable as dynamic for this to work. That way the compiler will defer the assignment to the IDynamicMetaObjectProvider part of the variable and the property will be given the value you've specified.

By typing the variable as ExpandoObject your specifying an actual type, and because of this the compiler won't use the dynamic aspects of the class.

0
On

Once you mark mark a variable as dynamic anything to do with that variable is happens at runtime. So, during compilation, the compiler is not aware of a property GivenName as it is not present in the type ExpandoObject. But when you declare it as dynamic the compiler will not worry about this variable and the binding happens at runtime.

You can find in detail how to implement a dynamic type at http://msdn.microsoft.com/en-us/vstudio/ff800651.aspx