我有一個有很多屬性的類。淺拷貝足以完全複製對象。簡單地在c中比較兩個對象的屬性#
我需要比較一個對象只是爲了檢查它是否包含與另一個完全相同的值。
我的想法:
第一個也是最明顯的解決方案就是創建每個屬性,一個接一個比較龐大的方法塊。
第二,將序列化每個對象和散列文件或做一些對它的md5校驗和。 (這實際上工作)。
第三種是對物體進行某種反射,這會使第一種選擇自動化,但是會增加複雜性。
速度並不是真正的問題。
有興趣聽到思想或任何其他方法我失蹤做這樣的事情。
編輯: 謝謝大家。我的解決方案:(修改爲現在是遞歸通用項目)。
public static bool IsSame<T>(T objA, T objB)
{
var type = typeof(T);
var properties = type.GetProperties();
foreach (var pi in properties.Where(a => a.CanRead))
{
if (pi.Name == "Item")
{
var piCount = properties.FirstOrDefault(a => a.Name == "Count");
int count = -1;
if (piCount != null && piCount.PropertyType == typeof(System.Int32))
count = (int)piCount.GetValue(objA, null);
if (count > 0)
{
for (int i = 0; i < count; i++)
{
dynamic child1 = pi.GetValue(objA, new object[] { i });
dynamic child2 = pi.GetValue(objB, new object[] { i });
return IsSame(child1, child2);
}
}
}
else
{
var val1 = type.GetProperty(pi.Name).GetValue(objA, null);
var val2 = type.GetProperty(pi.Name).GetValue(objB, null);
if (val1 != val2 && (val1 == null || !val1.Equals(val2)))
return false;
}
}
return true;
}
我會去反思,除非類結構不容易改變。如果它*不會*改變,我會選擇第一個解決方案,而不是(易於閱讀,易於維護) – Alex
http://stackoverflow.com/questions/506096/comparing-object-properties-in-c-sharp有用反射解決方案。 – Giedrius