[英]ExpandoObject doesn't contain “ContainsKey”?
我正在编写一个MVC应用程序,并通过动作过滤器封装了一系列设置的获取和传递给我的视图。 我可以在调试器中证明它可以正常工作。 我可以直接点击属性。 但是,由于设置是数据库支持的,因此我希望能够在我退出之前测试设置是否存在,并希望将相关属性附加到对象上。 我得到以下内容:
'System.Dynamic.ExpandoObject'不包含'ContainsKey'的定义
查看MSDN文档 ,它肯定会或至少应该这样做。 我的用例似乎也符合其预期的用法 。 因此,据我所知,我对这种方法没有做任何“怪异”的事情。 我在调试器中看到的一些屏幕截图:
即使“快速监视”窗口看到了对象的设置,我还是回过头来检查并确定将其自己声明为ExpandoObject
。 这是我用来生成和填充该对象的代码。
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);
}
}
所有这些代码都可以正常运行,而不会引发异常。 关于这里发生的事情有什么想法吗?
ExpandoObject
提供了ContainsKey
*的实现,作为IDictionary
的显式接口实现。 这意味着您只能在变量属于接口类型时访问该方法。
因此,要调用ContainsKey
您将需要通过IDictionary
类型的变量访问ExpandoObject
实例,如第二个示例所示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.