IEqualityComparerとかめんどい
Linqでの差分抽出しようと思ったら
え、クラス作らなきゃいけないの?
匿名クラスでIF継承とか思ったけどやっぱりそんなものなかった。
で、調べてみたら似たようなことをやっぱり思ったひとがいて汎用的なクラス作ってた。
http://brendan.enrick.com/post/linq-your-collections-with-iequalitycomparer-and-lambda-expressions.aspx
public class LambdaComparer<T> : IEqualityComparer<T> { private readonly Func<T, T, bool> _lambdaComparer; private readonly Func<T, int> _lambdaHash; public LambdaComparer(Func<T, T, bool> lambdaComparer) : this(lambdaComparer, o => 0) { } public LambdaComparer(Func<T, T, bool> lambdaComparer, Func<T, int> lambdaHash) { if (lambdaComparer == null) throw new ArgumentNullException("lambdaComparer"); if (lambdaHash == null) throw new ArgumentNullException("lambdaHash"); _lambdaComparer = lambdaComparer; _lambdaHash = lambdaHash; } public bool Equals(T x, T y) { return _lambdaComparer(x, y); } public int GetHashCode(T obj) { return _lambdaHash(obj); } }
結局これはこれで、このクラスを定義しなきゃいけないのだが。
Frameworkに実装しろよな。。。
俺が知らんだけかもしれんけど。
ちなみに↑はMSDNによると
IEqualityComparer<T> インターフェイスを実装する代わりに EqualityComparer<T> から派生させることをお勧めします。
とのこと。