2

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

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

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

查看MSDN: ExpandoObject,他们实际上做了不同的事情 - 使用dynamic关键字

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

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

谢谢

更新

现在我明白我必须使用dynamic关键字,但是如果允许,这条线有什么用

ExpandoObject myObj = new ExpandoObject();
4

2 回答 2

6

您需要声明该变量dynamic才能使其正常工作。这样,编译器会将分配推迟到IDynamicMetaObjectProvider变量的一部分,并且属性将被赋予您指定的值。

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

于 2012-10-11T16:43:40.883 回答
2

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

您可以在http://msdn.microsoft.com/en-us/vstudio/ff800651.aspx详细了解如何实现动态类型

于 2012-10-11T16:45:16.170 回答