无法为ExpandoObject指定值

时间:2012-10-11 16:40:12

标签: c# dynamicobject

只是尝试动态对象,我遇到了这个编译错误

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

System.Dynamic.ExpandoObject'不包含的定义   'GivenName'并没有扩展方法'GivenName'接受第一个   可以找到类型为'System.Dynamic.ExpandoObject'的参数

查看MSDN: ExpandoObject,他们实际上采用了不同的方法 - 使用dynamic关键字

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

对此有何解释?是否仍然可以在不使用myObj关键字的情况下为dynamic的实例分配值?我看是否有.SetProperty但没有。

由于

更新

现在我知道我必须使用dynamic关键字,但是如果允许的话,该行的用途是什么

ExpandoObject myObj = new ExpandoObject();

2 个答案:

答案 0 :(得分:5)

您需要将变量声明为dynamic才能生效。这样编译器会将赋值推迟到变量的IDynamicMetaObjectProvider部分,并且属性将被赋予您指定的值。

通过键入变量ExpandoObject指定实际类型,因此编译器不会使用类的动态方面。

答案 1 :(得分:2)

将变量标记为动态后,在运行时会发生与该变量有关的任何事情。因此,在编译期间,编译器不知道属性GivenName,因为它不存在于类型ExpandoObject中。但是当你将它声明为动态时,编译器不会担心这个变量,并且绑定在运行时发生。

您可以在http://msdn.microsoft.com/en-us/vstudio/ff800651.aspx

详细了解如何实施动态类型