代码之家  ›  专栏  ›  技术社区  ›  Andrew Davey

C#动态对象初始值设定项无法编译

  •  13
  • Andrew Davey  · 技术社区  · 15 年前

    下面的代码在我看来是合理的。它应该创建对象,然后使用动态特性让我分配任何我喜欢的属性。但是编译器说“ExpandoObject不包含测试的定义”。对此我说,“我知道,这是个奇怪的问题!”

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

    任何csc不允许这样做的想法。

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

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

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

    2 回复  |  直到 15 年前
        1
  •  13
  •   Kirk Woll    15 年前

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

        2
  •  7
  •   Judah Gabriel Himango    15 年前

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

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