【问题标题】:Dictionary<>.ContainsKey gives RuntimeBinderExceptionDictionary<>.ContainsKey 给出 RuntimeBinderException
【发布时间】:2014-08-05 19:44:01
【问题描述】:

在 .cshtml 中,我想检查 Directory&lt;int, Object&gt; 中是否存在密钥,但我总是出错并且找不到原因。

这是我的代码:

@foreach (KeyValuePair<int, int> weekAndYear in @ViewBag.WeekAndYears)
{
    int key = int.Parse(weekAndYear.Value + "" + weekAndYear.Key);

    bool exist = ViewBag.Menus.ContainsKey(key);
}

我得到的错误:

The best overloaded method match for System.Collections.Generic.Dictionary<int,Object>.this[int] has some invalid arguments

当我只使用 .Key 或 .Value 时,它​​仍然有效。

编辑 - 解决方案

问题是什么,我不知道,但是我已经用下面的代码解决了这个问题:

foreach (KeyValuePair<int, int> weekAndYear in @ViewBag.WeekAndYears)
    {
        int key = int.Parse(weekAndYear.Value + "" + weekAndYear.Key);

        bool exist = ((Dictionary<int, Object>)ViewBag.Menus).ContainsKey(key);
}

【问题讨论】:

  • 你在哪里得到这个错误,@ViewBag.WeekAndYears 是什么?
  • 在 @foreach 循环中,您的 KeyValuePair 应该是 KeyValuePair 而不是 KeyValuePair。这可能是问题所在。
  • @ViewBag.WeekAndYearsDictionary&lt;int, int&gt;。我在ContainsKey(key) 上收到错误消息。 @ViewBag.MenusDictionary&lt;int, Object&gt;
  • 查找失败时key的值是多少?
  • @InContext key 的值是int,即使它失败了。 @ViewBag.WeekAndYears 包含 {31: 2014, 32: 2014, 33: 2014}

标签: c# dictionary containskey


【解决方案1】:

您是否可以尝试使用 TryGetValue 而不是 ContainsKey 并查看它是否有效:

@foreach (KeyValuePair<int, int> weekAndYear in @ViewBag.WeekAndYears)
{
    int key = int.Parse(weekAndYear.Value + "" + weekAndYear.Key); 
    Object outValue;
    bool exist = Menus.TryGetValue(key, out outValue);
}

【讨论】:

  • 很好,这也有效!我使用了另一种解决方案并将其放在问题区域中,因为我无法回答自己的问题。
【解决方案2】:

问题是什么,我不知道,但是我已经用下面的代码解决了这个问题:

foreach (KeyValuePair<int, int> weekAndYear in @ViewBag.WeekAndYears)
    {
        int key = int.Parse(weekAndYear.Value + "" + weekAndYear.Key);

        bool exist = ((Dictionary<int, Object>)ViewBag.Menus).ContainsKey(key);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    相关资源
    最近更新 更多