我試圖在兩個字符串列表上實現自定義比較器,並使用.Except()linq方法來獲取那些不是列表中的一個。我做自定義比較器的原因是因爲我需要做一個「模糊」比較,即一個列表中的一個字符串可以嵌入另一個列表中的字符串內。linq除了和自定義的IEqualityComparer
我做了以下比較器
public class ItemFuzzyMatchComparer : IEqualityComparer<string>
{
bool IEqualityComparer<string>.Equals(string x, string y)
{
return (x.Contains(y) || y.Contains(x));
}
int IEqualityComparer<string>.GetHashCode(string obj)
{
if (Object.ReferenceEquals(obj, null))
return 0;
return obj.GetHashCode();
}
}
當我調試,命中是在的GetHashCode()方法唯一的斷點。 Equals()永遠不會被觸及。有任何想法嗎?
對我來說這是一個很好的練習。在我的情況下,我用'public int GetHashCode(string obj){return obj.ToLower()。GetHashCode();}'你的問題是舊的,但我在4年後遇到同樣的問題。 – 2014-02-21 23:00:27