在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