Словарь <>.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);
}