Словарь <>.ContainsKey дает исключение RuntimeBinderException

В.cshtml я хочу проверить, существует ли ключ в Directory<int, Object> но я всегда получаю ошибку и не могу найти почему.

Это мой код:

@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);
}

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);
}

Можете ли вы попробовать использовать 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);
}
Другие вопросы по тегам