在ExpandoObject或Dynamic属性中使用保留字(类型名称)

5

我该如何在ExpandoObject中设置一个键为保留字的属性呢?

像这样:

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

dynamic match = new {
  query = query,
  bool = true
}
1个回答

5
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<string, object>并使用索引器来访问它们:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接