C# 无法为ExpandooObject赋值
我只是在动态对象上试用,遇到了这个编译错误C# 无法为ExpandooObject赋值,c#,dynamicobject,C#,Dynamicobject,我只是在动态对象上试用,遇到了这个编译错误 ExpandoObject myObj = new ExpandoObject(); myObj.GivenName = "Testing"; System.Dynamic.ExpandooObject'不包含的定义 “GivenName”和无扩展方法“GivenName”接受第一个 找不到类型为“System.Dynamic.ExpandooObject”的参数 看一看,他们实际上做得不一样——使用dynamic关键字 dynamic myObj
ExpandoObject myObj = new ExpandoObject();
myObj.GivenName = "Testing";
System.Dynamic.ExpandooObject'不包含的定义
“GivenName”和无扩展方法“GivenName”接受第一个
找不到类型为“System.Dynamic.ExpandooObject”的参数
看一看,他们实际上做得不一样——使用dynamic
关键字
dynamic myObj = new ExpandoObject();
myObj.GivenName = "Testing";
对此有何解释?是否仍可以在不使用dynamic
关键字的情况下为myObj
实例赋值?我查看了它是否有.SetProperty
,但没有
谢谢
更新
现在我知道我必须使用dynamic
关键字,但是如果允许的话,这行有什么用呢
ExpandoObject myObj = new ExpandoObject();
您需要将变量声明为
dynamic
,这样才能工作。这样,编译器将把赋值延迟到变量的IDynamicMetaObjectProvider
部分,并为属性指定指定的值
通过将变量键入为
ExpandoObject
可以指定实际类型,因此编译器不会使用类的动态特性。一旦将变量标记为动态变量,与该变量相关的任何操作都将在运行时发生。因此,在编译期间,编译器不知道属性GivenName
,因为它不存在于类型ExpandoObject
中。但是,当您将其声明为动态时,编译器将不会担心此变量,绑定将在运行时发生
您可以在以下位置找到如何实现动态类型的详细信息: