如何为来自另一个 class 的测试参数设置 IEqualityComparer?

How to set IEqualityComparer for test parameters from another class?

我正在进行单元测试以比较列表值。为此,我使用了 IEqualityComparer。

这是我的 IEqualityComparer class。

public class KeyValueEqualityComparer : IEqualityComparer<KeyValue<TKey, TValue>>
{
    public bool Equals(KeyValue<TKey, TValue> x, KeyValue<TKey, TValue> y)
    {
        if (object.ReferenceEquals(x, y)) return true;

        if (object.ReferenceEquals(x, null) || object.ReferenceEquals(y, null)) return false;

        return x.Key == y.Key && x.Value == y.Value;
    }

    public int GetHashCode(KeyValue<TKey, TValue> obj)
    {
        if (object.ReferenceEquals(obj, null)) return 0;

        int hashCodeName = obj.Key == null ? 0 : obj.Key.GetHashCode();
        int hasCodeAge = obj.Value.GetHashCode();

        return hashCodeName ^ hasCodeAge;
    }
}

这是键值 class:

 public class KeyValue<TKey, TValue>
{
    public KeyValue()
    {
    }

    public KeyValue(TKey k, TValue v)
    {
        Key = k;
        Value = v;
    }

    public TKey Key { get; set; }
    public TValue Value { get; set; }
}

我正在尝试使用 TKey 和 Tvalue 作为内部参数 IEqualityComparer.then 我可以通过此 class 传递不同的数据类型。但问题是我不能在 IEqualityComparer 界面中使用参数。请告诉我一个方法。

如果您希望 class 从通用接口派生而不使用具体类型,您的 class 也必须是通用的:

public class KeyValueEqualityComparer<TKey, TValue> : IEqualityComparer<KeyValue<TKey, TValue>>

由于不能保证 TKeyTValue 可以通过 == 运算符进行比较(请参阅 Compiler Error CS0019),因此您必须使用 Equals 比较方法:

public bool Equals(KeyValue<TKey, TValue> x, KeyValue<TKey, TValue> y)
{
   if (object.ReferenceEquals(x, y)) return true;

   if (object.ReferenceEquals(x, null) || object.ReferenceEquals(y, null)) return false;

    return x.Key.Equals(y.Key) && x.Value.Equals(y.Value);
}