今天在研究 C# 动态时,有些让我吃惊(我从来没有经常使用它们,但最近我一直在试验 Nancy Web 框架)。我发现我不能这样做:

dynamic expando = new ExpandoObject();

expando.name = "John";

Console.WriteLine(expando["name"]);

最后一行抛出异常:



我理解错误消息,但我不明白为什么会发生这种情况。我查看了 ExpandoObject 的文档,它明确地实现了 IDictionary<,>,因此有一个 this.[index] 方法( MSDN )。为什么我不能调用它?

当然,没有什么可以阻止我手动将 ExpandoObject 向下转换为字典,然后对其进行索引,但这种做法违背了这一点;它也没有解释 Expando 如何能够隐藏其接口(interface)之一的方法。

这里发生了什么?

最佳答案



因为正如您在文档中正确发现的那样, indexer isexplicit interface implementation 。从 Explicit Interface Implementation Tutorial :



这意味着您必须将引用转换为接口(interface)才能访问它:

((IDictionary<String, Object>)expando)["name"]

关于c# - 为什么我不能索引到 ExpandoObject?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26778554/

10-17 01:15