2010-11-11 3 views
0

Мне нужно проверить, существует ли ключ и соответственно добавить или обновить словарь.Добавление или обновление элементов словаря с использованием Linq

 if (dict.ContainsKey("Key1")) 
      dict["Key1"] = "Value1"; 
     else 
      dict.Add("Key1", "Value1"); 

Могу ли я упростить это использование Linq или иным образом?

+0

Вы изменения коллекции, так что нет, вы не должны использовать Linq для этого. Если вам нужно фильтровать или проецировать последовательность, то Linq подходит. –

ответ

8

Вы можете упростить 4 строк кода на это:

dict["Key1"] = "Value1"; 

Если Key1 не существует в словаре он будет добавлен, и если она существует значение будет обновляться. Это то, что делает индексатор. Что касается LINQ, я не вижу никакого отношения к этому вопросу.

+0

Я думал, что смогу использовать LINQ для выбора и проверить, существует ли ключ, и решить, нужно ли добавлять элемент или обновлять его. – Nick

+1

@RSharma, какое значение LINQ даст то, что уже есть? Например, вы уже используете 'ContainsKey'. Что LINQ собирается предложить, что является более сжатым, удобочитаемым, точным и т. Д.? LINQ - это потрясающе, не поймите меня неправильно. Но вам это не нужно везде. –

0

Не совсем ... linq - это язык запросов и не предназначен для мутирования структур данных. Вы можете обойти это, но вы не должны считать ваш код неправильным, потому что это не linq. Единственная строка, которую вы могли бы добавить к коду, который вы отправили в «linq-ify», это было бы изменить dict.ContainsKey("Key1") на dict.Any(x => x.Key == "Key1"), но не делает этого как он будет no doubt be slower. Я на самом деле думаю, что ответ Дарина довольно изящный и рекомендуется использовать его!

0

Вы также можете использовать что-то вроде этого:

Dictionary<string, string> dict = new Dictionary<string, string>(); 
     dict.Add("1", "1"); 
     dict.Add("2", "2"); 

     var x = dict.Where(q => q.Key == "1"); 
     if (x.Any()) 
      dict[x.FirstOrDefault().Key] = "new"; 
Смежные вопросы