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
中。但是,当您将其声明为动态时,编译器将不会担心此变量,绑定将在运行时发生

您可以在以下位置找到如何实现动态类型的详细信息: