2015-02-05 1 views
0

У меня IDictionary с KeyPair <int, SteamApp>, где SteamApp - это пользовательский класс в используемой мне инфраструктуре SteamAPI. Класс SteamApp имеет поле Name, которое я бы хотел найти в словаре. Я хочу найти конкретное название игры. Как мне это сделать?Поиск IDictionary на основе переменной элемента значения

Короткий фрагмент кода:

foreach (var pair in allGames) { 
      Debug.WriteLine(pair.Value.Name); 
} 
+0

Было бы реально помочь, если бы показать короткий, но полный пример, а не * описания * ваш код. –

+0

Почему бы не использовать 'Name' в качестве вашего ключа? –

+0

Кроме того, что именно представляет собой ваша структура данных? Вы говорите, что у вас есть 'IDictionary' с' KeyValuePair'? это звучит странно. –

ответ

3

Так что вы хотите, чтобы все KeyValuePair<int, SteamApp> в словаре, где имя SteamApp такое же, как вы ищете?

var allKeyValues = dict.Where(kv => kv.Value.Name == searchedName); 
foreach(KeyValuePair<int, SteamApp> kv in allKeyValues) 
{ 
    // a game with that name exists in the dictionary 
} 

Если вы хотите принять только первое использование FirstOrDefault:

var keyVal = dict.FirstOrDefault(kv => kv.Value.Name == searchedName); 
if(keyVal.Value != null) 
{ 
    // a game with that name exists in the dictionary 
} 
+0

Это было в восторге, что я искал! Спасибо! Я принимаю ответ за 11 минут. – Herbstein

+1

KeyValuePair не имеет значения NULL, поэтому вы должны проверить, является ли 'kv.Value! = Null' – Staeff

+0

@Staeff: хорошая точка, я забыл, что' KeyValuePair' - это структура, следовательно, тип значения и, следовательно, никогда не имеет значения null. Он также мог бы «Выбрать (kv => new {Key = kv.Key, Value = kv.Value})'. Тогда это был класс, и он мог использовать 'if (keyVal! = Null)'. –