我正在做单元测试以比较列表值。为此,我使用了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接口内使用参数。请告诉我一种方法。
答案 0 :(得分:0)
如果您希望类从通用接口派生而无需使用具体类型,则您的类也必须是通用的:
public class KeyValueEqualityComparer<TKey, TValue> : IEqualityComparer<KeyValue<TKey, TValue>>
由于不能保证可以通过TKey
运算符比较TValue
和==
(请参阅Compiler Error CS0019),因此必须使用{{1} }进行比较:
Equals