以下代码对我来说似乎很合理。它应该创建对象,然后使用动态功能让我分配我喜欢的任何属性。但是编译器说“ExpandoObject不包含Test的定义”。我说,“我知道,这是一个怪胎!”
dynamic example = new ExpandoObject
{
Test = "fail"
};
任何想法为什么csc不允许这样做。
另一种方法是手动将代码扩展为单独的属性分配。
dynamic example = new ExpandoObject();
example.Test = "fail";
当我有很多要分配的属性时,这很烦人。
答案 0 :(得分:13)
在对象初始值设定项中,类型为ExpandoObject
,而不是dynamic
,因此您无法获得动态功能。 在初始化程序之后,您正在对dynamic
类型的变量进行操作,因此 的动态功能。
答案 1 :(得分:7)
在第一个示例中,C#编译器将在ExpandoObject上查找名为Test的属性。它不存在。
在第二个示例中,编译器将在动态对象上查找Test属性。这是允许的,所以它编译。</ p>