防止将具有相同 byte[] 键的两个项目添加到 KeyedCollection<byte[], MyObject>

Prevent adding two items with the same byte[] key in from being added to a KeyedCollection<byte[], MyObject>

代码:

public class Coll : KeyedCollection<byte[], MyObject>
{
    protected override byte[] GetKeyForItem(MyObject item) => item.Key;
    
}

public class EquComparer : IEqualityComparer<byte[]>
{
    public bool Equals(byte[]? x, byte[]? y)
    {
        if (x is null && y is null) return true;
        if (x is null) return false;
        if (y is null) return false;
        return x.SequenceEqual(y);
    }

    public int GetHashCode([DisallowNull] byte[] obj)
    {
        int result = Int32.MinValue;
        foreach (var b in obj)
        {
            result += b;
        }

        return result;
    }
}

我的密钥是byte[]。我想设置默认的相等比较器来将键与使用 byte[]::SequenceEqual() 的东西进行比较,以防止添加具有相同键的两个项目。

有办法吗?

编辑: 正如其他人指出的那样,我可以使用构造函数来指定非默认相等比较器。我敢肯定它会在某个时候被遗忘,从而导致很难找到的错误。这就是为什么我想向 class 添加一些代码,使我的自定义相等比较器成为 class.

的默认值

KeyedCollection<TKey,TItem> class 有一个接受 IEqualityComparer<TKey>constructor。您可以在实例化派生的 class:

时调用此构造函数
public class Coll : KeyedCollection<byte[], MyObject>
{
    public Coll() : base(new EquComparer()) { }

    protected override byte[] GetKeyForItem(MyObject item) => item.Key;
}