基于key的KeyValueComparer
KeyValueComparer based on key
我有 2 个键值比较器 - 在这两个中我都使用键来比较,它是字符串。
我可以使用泛型作为值 - 所以我不能有 2 个 classes 我只能有 1 个?
所以我希望我可以只有 1 个 class
而不是下面的 classes
class KvpComparer : IEqualityComparer < KeyValuePair < string, T>>
{
...
}
class KvpComparer : IEqualityComparer<KeyValuePair<string, Tuple<string, string>>>
{
public bool Equals(KeyValuePair<string, Tuple<string, string>> x, KeyValuePair<string, Tuple<string, string>> y)
{
return x.Key.Equals(y.Key);
}
public int GetHashCode(KeyValuePair<string, Tuple<string, string>> obj)
{
return obj.Key.GetHashCode();
}
}
class KvpComparer2 : IEqualityComparer<KeyValuePair<string, string>>
{
public bool Equals(KeyValuePair<string, string> x, KeyValuePair<string, string> y)
{
return x.Key.Equals(y.Key);
}
public int GetHashCode(KeyValuePair<string, string> obj)
{
return obj.Key.GetHashCode();
}
}
由于比较器仅在 KeyValuePair
的值类型上有所不同,您可以使用值类型的类型参数将两个比较器概括为一个通用类型,如下所示。
class KvpComparer<T> : IEqualityComparer<KeyValuePair<string,T>> where T : class
{
public bool Equals(KeyValuePair<string,T> x, KeyValuePair<string,T> y)
{
return x.Key.Equals(y.Key);
}
public int GetHashCode(KeyValuePair<string, T> obj)
{
return obj.Key.GetHashCode();
}
}
我有 2 个键值比较器 - 在这两个中我都使用键来比较,它是字符串。 我可以使用泛型作为值 - 所以我不能有 2 个 classes 我只能有 1 个?
所以我希望我可以只有 1 个 class
而不是下面的 classesclass KvpComparer : IEqualityComparer < KeyValuePair < string, T>>
{
...
}
class KvpComparer : IEqualityComparer<KeyValuePair<string, Tuple<string, string>>>
{
public bool Equals(KeyValuePair<string, Tuple<string, string>> x, KeyValuePair<string, Tuple<string, string>> y)
{
return x.Key.Equals(y.Key);
}
public int GetHashCode(KeyValuePair<string, Tuple<string, string>> obj)
{
return obj.Key.GetHashCode();
}
}
class KvpComparer2 : IEqualityComparer<KeyValuePair<string, string>>
{
public bool Equals(KeyValuePair<string, string> x, KeyValuePair<string, string> y)
{
return x.Key.Equals(y.Key);
}
public int GetHashCode(KeyValuePair<string, string> obj)
{
return obj.Key.GetHashCode();
}
}
由于比较器仅在 KeyValuePair
的值类型上有所不同,您可以使用值类型的类型参数将两个比较器概括为一个通用类型,如下所示。
class KvpComparer<T> : IEqualityComparer<KeyValuePair<string,T>> where T : class
{
public bool Equals(KeyValuePair<string,T> x, KeyValuePair<string,T> y)
{
return x.Key.Equals(y.Key);
}
public int GetHashCode(KeyValuePair<string, T> obj)
{
return obj.Key.GetHashCode();
}
}