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

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

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

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

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

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

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

在对象初始值设定项中,类型是ExpandoObject ,而不是dynamic ,因此您无法获得动态function。 初始化程序之后,您正在操作dynamic类型的变量,因此可以使用动态function。

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

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