gpt4 book ai didi

c# - 为什么我不能索引到 ExpandoObject?

转载 作者:IT王子 更新时间:2023-10-29 04:11:07 24 4
gpt4 key购买 nike

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

dynamic expando = new ExpandoObject();

expando.name = "John";

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

最后一行抛出异常:

Cannot apply indexing with [] to an expression of type 'System.Dynamic.ExpandoObject'

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

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

这是怎么回事?

最佳答案

how the Expando was able to hide the method of one of its interfaces.

因为正如您在文档中正确发现的那样,indexer is一个explicit interface implementation .来自 Explicit Interface Implementation Tutorial :

A class that implements an interface can explicitly implement a member of that interface. When a member is explicitly implemented, it cannot be accessed through a class instance, but only through an instance of the interface.

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com