如何为来自另一个 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>>
由于不能保证 TKey
和 TValue
可以通过 ==
运算符进行比较(请参阅 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);
}
我正在进行单元测试以比较列表值。为此,我使用了 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>>
由于不能保证 TKey
和 TValue
可以通过 ==
运算符进行比较(请参阅 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);
}