2つのオブジェクトを比較して相違点を見つける最も良い方法は何ですか?2つのオブジェクトを比較して相違点を見つけよう
Customer a = new Customer();
Customer b = new Customer();
2つのオブジェクトを比較して相違点を見つける最も良い方法は何ですか?2つのオブジェクトを比較して相違点を見つけよう
Customer a = new Customer();
Customer b = new Customer();
一つの柔軟なソリューション:あなたはすべてのプロパティを列挙していると等しくないかを判断するためにリフレクションを使用することができ、その後、いくつかのプロパティリストとの両方の異なる値を返します。
ここに、あなたが求めているものの良いスタートであるいくつかのコードの例があります。今はフィールド値だけを見ていますが、リフレクションを通してチェックするために他のコンポーネントをいくつでも追加することができます。すべてのオブジェクトがそれを使用できるように、拡張メソッドを使用して実装されています。
を知るために使用することができ
class SomeCustomClass
{
public int x = 12;
public int y = 13;
}
と肉とジャガイモ
using System.Collections.Generic;
using System.Reflection;
static class extentions
{
public static List<Variance> DetailedCompare<T>(this T val1, T val2)
{
List<Variance> variances = new List<Variance>();
FieldInfo[] fi = val1.GetType().GetFields();
foreach (FieldInfo f in fi)
{
Variance v = new Variance();
v.Prop = f.Name;
v.valA = f.GetValue(val1);
v.valB = f.GetValue(val2);
if (!v.valA.Equals(v.valB))
variances.Add(v);
}
return variances;
}
}
class Variance
{
public string Prop { get; set; }
public object valA { get; set; }
public object valB { get; set; }
}
Equals
方法とIEquatable<T>
インターフェースと比較する
SomeCustomClass a = new SomeCustomClass();
SomeCustomClass b = new SomeCustomClass();
a.x = 100;
List<Variance> rt = a.DetailedCompare(b);
私のサンプルクラスを使用します2つのオブジェクトが等しいが、あなたが知ることができない場合オブジェクト間の違い。それぞれのプロパティ値を比較することによって、リフレクションを使用できます。
これらのインスタンスをテキスト形式にシリアル化し、結果の文字列(XML、JSONなど)の違いを比較する方法もあります。
+1「肉とポテト」 – Kehlan
if(!v.valA.Equals(v.valB))の代わりにif(!Equals(v.valA、v.valB))を使用するとNullExceptionを防ぐことができます – Jerome2606
オートプロパティ? –