今天在研究 C# 动态时,有些让我吃惊(我从来没有经常使用它们,但最近我一直在试验 Nancy Web 框架)。我发现我不能这样做:
dynamic expando = new ExpandoObject();
expando.name = "John";
Console.WriteLine(expando["name"]);
最后一行抛出异常:
我理解错误消息,但我不明白为什么会发生这种情况。我查看了 ExpandoObject 的文档,它明确地实现了
IDictionary<,>
,因此有一个 this.[index]
方法( MSDN )。为什么我不能调用它?当然,没有什么可以阻止我手动将
ExpandoObject
向下转换为字典,然后对其进行索引,但这种做法违背了这一点;它也没有解释 Expando 如何能够隐藏其接口(interface)之一的方法。这里发生了什么?
最佳答案
因为正如您在文档中正确发现的那样, indexer is 和 explicit interface implementation 。从 Explicit Interface Implementation Tutorial :
这意味着您必须将引用转换为接口(interface)才能访问它:
((IDictionary<String, Object>)expando)["name"]
关于c# - 为什么我不能索引到 ExpandoObject?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26778554/