2017-04-27 50 views

回答

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<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