Словарь: расстроенное использование [компактный синтаксис]

Я хотел бы сделать что-то подобное, используя короткий синтаксис:

var p = new Dictionary<string, string="">();
p["a"] = "2";
p["a"] = "3";
</string,>

вместо этого я должен сделать:

if (p.ContainsKey("a"))
 p["a"] = "2";
else
 p.Add("a", "2");

if (p.ContainsKey("a"))
 p["a"] = "3";
else
 p.Add("a", "3");

Существует ли компактный синтаксис?

4 ответа

p["a"] = "2";

эквивалентно

if (!p.ContainsKey("a"))
 p.Add("a", "2");
else
 p["a"] = "2";

Первый должен быть предположен на самом деле, потому что он выполняется быстрее.


По свойству MSDN для Item:

Если указанный ключ не найден, операция get вызывает исключение KeyNotFoundException, а операция set создает новый элемент с указанным ключом.

Такой компактный синтаксис существует


У меня есть этот метод расширения:

public static void AddOrKeep<k, v="">(this IDictionary<k, v=""> dictionary, K key, V val)
{
 if (!dictionary.ContainsKey(key))
 {
 dictionary.Add(key, val);
 }
}
</k,></k,>

Используйте его так:

dict.AddOrKeep("a", "2");

Он сохраняет текущее значение, если оно существует, но добавляет его, если оно новое.


Вы можете использовать ContainsKey Method of Dictionary для проверки того, содержит ли конкретный ключ словарь или нет.

Например

if (!p.ContainsKey("a"))
{
p.Add("a","2");
}
else
{
p["a"] = "2";
}

licensed under cc by-sa 3.0 with attribution.