興味深いことに、IEqualityComparerの具体的な実装のGetHashCodeはどのように機能しますか?
私が尋ねる理由は、linqを使用して2つのコレクションを結合し、左側のコレクションのみにアイテムがある場合、GetHashCodeが2回呼び出されるためです。さらに、両方のコレクションに1つの行がある場合、4回呼び出されます。
これは大まかなタイピングですが、要点はわかります。GetHashCodeは2回呼び出されますが、listOneの1つのアイテムに対して2回呼び出されると思いますか?
例えば
var listOne = new List<SearchResult>{new SearchResult{Name="Blah"}};
var listTwo = new List<SearchResult>();
listOne.Union(listTwo, SearchResultComparer);
public class SearchResultComparer : IEqualityComparer<SearchResult>
{
public bool Equals(SearchResult x, SearchResult y){....}
public int GetHashCode(SearchResult obj)
{
unchecked
{
int result = 0;
result = (result * 397) ^ (obj.Name != null ?
return result;
}
}
}
ありがとう