Я пытался ответить на этот вопрос в Google, так как не могу получить совершенно правильную формулировку (отсюда и название).
Суть в том, почему одна из приведенных ниже работ, есть ли сокращение для test3 :
var test1 = new Dictionary<string, int>();
test1["Derp"] = 10; // Success
var test2 = new Dictionary<string, List<int>>();
test2["Derp"].Add(10); // Fail
var test3 = new Dictionary<string, List<int>>();
test3["Derp"] = new List<int>();
test3["Derp"].Add(10); // Success
Сценарий, с которым я часто сталкиваюсь, похож на приведенный ниже (это очень простой пример):
var names = new List<string>() { "Jim", "Fred", "Fred", "Dave", "Jim", "Jim", "Jim" };
var nameCounts = new Dictionary<string, int>();
foreach(var name in names)
{
if (!nameCounts.ContainsKey(name))
nameCounts.Add(name, 0);
nameCounts[name]++;
}
В другихслова - есть ли способ пропустить проверку «ContainsKey» и сразу перейти к добавлению в мой список (и автоматически ввести ключ)?
Редактировать: чтобы быть понятным, я не использовал нижеприведенное, как в моемв реальной жизни все не так просто (к сожалению!)
var nameCounts = names.GroupBy(x => x)
.ToDictionary(x => x.Key, x => x.Count());