以下の例のように、2つの汎用リストの違いを見つけようとしています。 t1とt2には同じプロパティが含まれていますが、それらは同じオブジェクトではないため、IEqualityComparerを実装する必要があります。LinqカスタムIEqualityComparerを除いて
この例では動作しているようですが、実際のクラスにはいくつかのプロパティがあり、他のいくつかのクラスでも同じことをする必要があります。
私は車輪を再発明しているかどうか疑問に思っていましたか?
2つのオブジェクトのすべてのプロパティを比較する簡単な方法はありますか?現時点では、単純な型を含むクラスには本当に対処する必要がありますが、他のクラスのインスタンスを含むクラスで動作する比較関数があります。私は通常のために行く
void Main()
{
var t1 = new Sizes { Name = "Test" , Size = 1} ;
var t2 = new Sizes { Name = "Test" , Size = 1} ;
var list1 = new List<Sizes>();
var list2 = new List<Sizes>();
list1.Add(t1);
list2.Add(t2);
var differences = list2.Except(list1 , new SizesComparer());
// differences should be empty.
}
public class Sizes
{
public string Name { get; set; }
public int Size { get; set; }
}
public class SizesComparer : IEqualityComparer<Sizes>
{
bool IEqualityComparer<Sizes>.Equals(Sizes x, Sizes y)
{
return (x.Name.Equals(y.Name) && x.Size.Equals(y.Size));
}
int IEqualityComparer<Sizes>.GetHashCode(Sizes obj)
{
if (Object.ReferenceEquals(obj, null))
return 0;
return obj.Name.GetHashCode() + obj.Size;
}
}
参照IEnumerable.Except()とカスタム比較子 - http://stackoverflow.com/q/1299513/485076 – sll