如何动态引用ExpandoObject中的字段?

ScA*_*er2 4 c# dynamic expando

有没有办法使用"IDictionary"样式查找动态访问expando的属性?

var messageLocation = "Message";
dynamic expando = new ExpandoObject();
expando.Message = "I am awesome!";
Console.WriteLine(expando[messageLocation]);
Run Code Online (Sandbox Code Playgroud)

Bro*_*ass 11

你必须投射ExpandoObjectIDictionary<string, object>:

var messageLocation = "Message";
dynamic expando = new ExpandoObject();
expando.Message = "I am awesome!";

var expandoDict = (IDictionary<string, object>)expando;
Console.WriteLine(expandoDict[messageLocation]);
Run Code Online (Sandbox Code Playgroud)

(此外,必须键入您的expando变量,dynamic因此在运行时确定属性访问权限 - 否则您的示例将无法编译)

  • 请注意,转换可以隐式完成:`IDictionary <string,object> expandoDict = expando;`将正常工作. (6认同)
  • 谢谢(你的)信息。我真的很希望我能说 expando["whatever"] 不过。我真的不明白为什么演员是必要的,特别是因为它是动态的。 (2认同)