为什么我不能索引到ExpandoObject?
今天在研究C#动态时,有些东西让我感到惊讶(我从未使用过它们,但最近我一直在尝试使用Nancy Web框架)。 我发现我不能这样做:
dynamic expando = new ExpandoObject(); expando.name = "John"; Console.WriteLine(expando["name"]);
最后一行抛出exception:
无法将带有[]的索引应用于“System.Dynamic.ExpandoObject”类型的表达式
我理解错误信息,但我不明白为什么会这样。 我查看了ExpandoObject的文档,它显式地实现了IDictionary
,因此有一个this.[index]
方法( MSDN )。 为什么我不能打电话给它?
当然,没有什么可以阻止我手动将ExpandoObject
向下转换为字典然后索引到它中,但这种方式无视这一点; 它也没有解释Expando如何能够隐藏其中一个接口的方法。
这里发生了什么?
Expando如何能够隐藏其中一个接口的方法。
因为正如您在文档中正确发现的那样, 索引器是一个显式的接口实现 。 从显式接口实现教程 :
实现接口的类可以显式实现该接口的成员。 当显式实现成员时,不能通过类实例访问它,而只能通过接口的实例访问它。
这意味着您必须将引用转换为接口才能访问它:
上述就是C#学习教程:为什么我不能索引到ExpandoObject?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
((IDictionary)expando)["name"]
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1301115.html