首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExpandoObject不包含"ContainsKey"?

ExpandoObject不包含"ContainsKey"?
EN

Stack Overflow用户
提问于 2015-12-16 22:18:37
回答 1查看 1.8K关注 0票数 0

我正在编写一个MVC应用程序,并通过一个Action过滤器封装一系列设置的获取和传递给我的视图。我可以在调试器中演示这一点。我可以直接撞到这些房产。但是,由于设置是数据库支持的,因此我希望能够在关闭之前测试设置是否存在,并期望相关属性附加到对象。我得到以下信息:

'System.Dynamic.ExpandoObject‘不包含'ContainsKey’的定义

MSDN文档的角度来看,它肯定会,或者至少应该这么做。我的用例似乎也适合其预定用途。所以,据我所知,我没有用这种方法做任何“奇怪”的事情。我在调试器中看到的一些截图:

尽管QuickWatch窗口看到了对象的设置,但我还是回去检查了一下,并且非常肯定地自己将其声明为ExpandoObject。下面是我用来生成和填充这个对象的代码。

代码语言:javascript
复制
dynamic bag = filterContext.Controller.ViewBag;

bag.Settings = new ExpandoObject();
IDictionary<string, object> settingsDictionary = (IDictionary<string, object>) bag.Settings;

foreach (KeyValuePair<string, Dictionary<string, string>> pair in settings)
{
    settingsDictionary[pair.Key] = new ExpandoObject();
    IDictionary<string, object> innerDictionary = (IDictionary<string, object>) settingsDictionary[pair.Key];

    foreach (KeyValuePair<string, string> innerValue in pair.Value)
    {
        innerDictionary[innerValue.Key] = JsonConvert.DeserializeObject(innerValue.Value);
    }
}

所有这些代码都运行良好,没有抛出异常。对这里发生了什么有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-16 22:37:27

ExpandoObjectContainsKey *提供了一个实现,作为IDictionary的一个显式接口实现。这意味着只有当变量属于接口类型时,才能访问该方法。

因此,要调用ContainsKey,您需要通过一个类型为IDictionary的变量访问ExpandoObject实例,如您在第二个示例中所示。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34323191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档