C#动态对象初始值设定项不会编译

时间:2010-11-18 15:15:08

标签: c# dynamic c#-4.0

以下代码对我来说似乎很合理。它应该创建对象,然后使用动态功能让我分配我喜欢的任何属性。但是编译器说“ExpandoObject不包含Test的定义”。我说,“我知道,这是一个怪胎!”

dynamic example = new ExpandoObject
{
  Test = "fail"
};

任何想法为什么csc不允许这样做。

另一种方法是手动将代码扩展为单独的属性分配。

dynamic example = new ExpandoObject();
example.Test = "fail";

当我有很多要分配的属性时,这很烦人。

2 个答案:

答案 0 :(得分:13)

在对象初始值设定项中,类型为ExpandoObject,而不是dynamic,因此您无法获得动态功能。 初始化程序之后,您正在对dynamic类型的变量进行操作,因此 的动态功能。

答案 1 :(得分:7)

在第一个示例中,C#编译器将在ExpandoObject上查找名为Test的属性。它不存在。

在第二个示例中,编译器将在动态对象上查找Test属性。这是允许的,所以它编译。<​​/ p>