只是尝试动态对象,我遇到了这个编译错误
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();
答案 0 :(得分:5)
您需要将变量声明为dynamic
才能生效。这样编译器会将赋值推迟到变量的IDynamicMetaObjectProvider
部分,并且属性将被赋予您指定的值。
通过键入变量ExpandoObject
指定实际类型,因此编译器不会使用类的动态方面。
答案 1 :(得分:2)
将变量标记为动态后,在运行时会发生与该变量有关的任何事情。因此,在编译期间,编译器不知道属性GivenName
,因为它不存在于类型ExpandoObject
中。但是当你将它声明为动态时,编译器不会担心这个变量,并且绑定在运行时发生。