【问题标题】:Using a reserved word (Type name) as ExpandoObject or Dynamic property使用保留字(类型名称)作为 ExpandoObject 或 Dynamic 属性
【发布时间】:2017-09-25 00:42:04
【问题描述】:

如何使用保留字的键设置 ExpandoObject 的属性?

像这样:

dynamic query = new ExpandoObject();
query.size = 10;
query.date = "2017-04-27";

dynamic match = new {
  query = query,
  bool = true
}

【问题讨论】:

    标签: c# asp.net elasticsearch dynamic expandoobject


    【解决方案1】:

    ExpandoObject 中,您可以通过将ExpandoObject 实例转换为IDictionary<string, object> 来使用任何字符串值 作为属性名称(包括保留字、空格等,甚至是空字符串):

    dynamic query = new ExpandoObject();
    (query as IDictionary<string, object>)["bool"] = true;
    (query as IDictionary<string, object>)[" b o o (g)? l \"e:)\""] = false;
    (query as IDictionary<string, object>)[""] = true;
    

    但是您将无法使用“纯 C# 语法”(即obj.prop)访问此类属性。您必须将对象转换为 IDictionary&lt;string, object&gt; 并使用索引器访问它们:

    var qDict = query as IDictionary<string, object>;
    Console.WriteLine(qDict["bool"]);
    Console.WriteLine(qDict[" b o o (g)? l \"e:)\""]);
    Console.WriteLine(qDict[""]);
    // Prints:
    //   True
    //   False
    //   True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 2020-05-21
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      相关资源
      最近更新 更多