我想比較兩個類的數據類型並返回bool值。問題是我的方法不中類的類在C中比較數據類型#
這裏的比較值是代碼:
public static class Compare
{
public static bool PublicInstancePropertiesEqual<T>(this T self, T to, params string[] ignore) where T : class
{
if (self != null && to != null)
{
var type = typeof(T);
var ignoreList = new List<string>(ignore);
var unequalProperties =
from pi in type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
where !ignoreList.Contains(pi.Name)
let selfValue = type.GetProperty(pi.Name).GetValue(self, null)
let toValue = type.GetProperty(pi.Name).GetValue(to, null)
where selfValue != toValue && (selfValue == null || !selfValue.Equals(toValue))
select selfValue;
return !unequalProperties.Any();
}
return self == to;
}
}
這裏是比較:
private void Form1_Load(object sender, EventArgs e)
{
Obj1 obj1 = new Obj1();
Obj1 obj11 = new Obj1();
Obj2 obj2 = new Obj2();
Obj2 obj22 = new Obj2();
obj1.param1 = "1";
obj1.param2 = "2";
obj2.param3 = "3";
obj1.obj2 = obj2;
obj11.param1 = "1";
obj11.param2 = "2";
obj22.param3 = "3";
obj11.obj2 = obj22;
bool res = Compare.PublicInstancePropertiesEqual(obj1, obj11, ("secure"));
}
}
class Obj1
{
public string param1 { get; set; }
public string param2 { get; set; }
public Obj2 obj2 { get; set; }
}
class Obj2
{
public string param3 { get; set; }
public decimal param4 { get; set; }
}
返回的值是假的res
你有沒有調試,看看它爲什麼不起作用? – Patrick
您應該調用您自己的PublicInstancePropertiesEqual方法,而不是調用selfValue.Equals(toValue),當然您需要在這種情況下爲值類型添加一些檢查 – Patrick
手動測試每個屬性,以查看哪個比較失敗。那麼對於該屬性,測試比較條件的三個部分中的每一部分以查看哪一個是真或假。 – HugoRune