首页 > 解决方案 > 排序列表和重复的键

问题描述

我正在使用SortedList<TKey, TValue>集合。我发现自己经常这样做:

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

只是为了避免“重复键”异常。我不喜欢这样,代码可读性受到惩罚。显然,我不需要重复的键。

是否有任何选项或不同的集合类型有助于跳过此检查?

标签: c#.netvisual-studiogenericscollections

解决方案


如果您想在密钥已经存在的情况下保留旧值(这是您当前代码所做的),那么首先检查是唯一的选择。然而,为了简化事情,我们可以创建一个包装检查的扩展方法。

下面是一个示例,它返回一个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);

推荐阅读