如何为另一个类的测试参数设置IEqualityComparer?

时间:2018-08-08 11:03:17

标签: c# unit-testing nunit

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

这是我的IEqualityComparer类。

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;
    }
}

这是KeyValue类:

 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; }
}

我试图在IEqualityComparer中使用TKey和Tvalue作为参数。然后我可以通过此类传递不同的数据类型。但是问题是我无法在IEqualityComparer接口内使用参数。请告诉我一种方法。

1 个答案:

答案 0 :(得分:0)

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

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

由于不能保证可以通过TKey运算符比较TValue==(请参阅Compiler Error CS0019),因此必须使用{{1} }进行比较:

Equals