SortedList и дублированные ключи - PullRequest
0 голосов
/ 07 августа 2020

Я использую SortedList сборник. Я часто делаю:

if (!sortedList.ContainsKey(key))
{
    sortedList.Add(key, value);
}

, чтобы избежать исключения «дублированный ключ». Мне это не нравится, да и читабельность кода наказывается. Разумеется, мне не нужны дублированные ключи.

Есть ли какой-нибудь вариант или другой тип коллекции, которые помогут пропустить эту проверку?

Ответы [ 2 ]

3 голосов
/ 07 августа 2020

Если вы хотите сохранить старое значение, если ключ уже существует (что и делает ваш текущий код), тогда проверка сначала - единственный вариант. Однако для упрощения мы можем создать метод расширения, который обертывает проверку.

Вот пример, который возвращает bool, указывающее, было ли добавлено новое значение:

public static class Extensions
{
    public static bool AddIfMissing<TKey, TValue>(
        this SortedList<TKey, TValue> list, TKey key, TValue value)
    {
        if (list.ContainsKey(key)) return false;
        list.Add(key, value);
        return true;
    }
}

Теперь, когда мы хотим добавить значение, нам не нужно писать код, который проверяет ключ каждый раз, мы просто пишем:

sortedList.AddIfMissing(key, value);
2 голосов
/ 07 августа 2020

Достаточно сделать

sortedList[key] = value;

Если ключ существует, он будет заменен, если нет, будет создан. Отметьте здесь

...