我保持一個代碼庫,我已經發現了兩個擴展方法,處理檢查對象的結構平等,這是我不喜歡所有的(一個調用另一個):通用平等檢查
public static bool IsObjectEqual<T>(this T obj, T obj2)
{
foreach (var pi in obj.GetType().GetProperties())
{
var enumerable1 = pi.GetValue(obj, null) as IEnumerable;
var enumerable2 = pi.GetValue(obj2, null) as IEnumerable;
if (enumerable1 != null)
{
foreach (var item in enumerable1)
{
if (enumerable2 == null || !((object[])enumerable2).Contains(item))
{
return false;
}
}
}
else if (!IsPropertyInfoValueEqual(pi, obj, obj2))
{
return false;
}
}
return true;
}
private static bool IsPropertyInfoValueEqual<T>(PropertyInfo pi, T obj, T obj2)
{
var val = pi.GetValue(obj, null);
var val2 = pi.GetValue(obj2, null);
if (val != null && val2 != null)
{
return val.Equals(val2);
}
return (val == null && val2 == null);
}
問題是,我有想出一個場景的麻煩,我想他們會失敗,或者會出現問題。我在我的水域知道他們錯了,我不能把它放在手指上。
在實現相等性檢查時,我總是使用IEquateable<T>
,所以沒有任何處理平等的框架類/接口是調用我的spidey感覺的一件事情。我意識到這種方法試圖成爲一種廣義的,基於反思的方法,但它讓我感到緊張(如前所述)。
任何人都可以看到這些方法是合法的問題?
編輯
大合法問題的方法。轉換爲object []會導致InvalidCastException。
這感覺有點像一個代碼審查的問題。 –
它是,但沒有人去那個網站。 – onefootswill
這並不意味着它應該在這裏發佈。 –