我有以下代碼中的問題:C#反射Property.GetValue()問題
int errorCount = 0;
foreach (var cinf in client.GetType().GetProperties())
{
var vinf = viewModel.GetType().GetProperty(cinf.Name);
if (vinf != null)
{
if (cinf.GetValue(client, null) != vinf.GetValue(viewModel, null))
{
errorCount++;
}
}
}
這是一種用於自動測試,看看是否映射從DTO模型對象工作過。如果我使用更爲繁瑣的方式爲每個屬性寫這個:
Assert.AreEqual(viewModel.ClientCompanyID, client.ClientCompanyID);
這工作正常。
問題是:反射代碼錯誤地評估了「if val1!= val2」語句(或者看起來如此)。如果我通過這個代碼,評估基本上說「1不等於1」,並錯誤地添加了一個錯誤。此外,如果我測試此與此代碼,我得到同樣的錯誤看似結果:
var clientEx = client.GetType().GetProperty("ClientCompanyID");
var viewModelEx = viewModel.GetType().GetProperty("ClientCompanyID");
var clientVal = clientEx.GetValue(client, null);
var viewModelVal = viewModelEx.GetValue(viewModel, null);
bool test = (clientVal == viewModelVal);
的布爾返回false,即使通過代碼,clientVal = 1和viewModelVal = 1步進見附圖。
任何幫助,將不勝感激!
謝謝你們。
Tim。
編輯:可以給你所有的答案。很高興它最終很簡單。非常感謝你的幫助。乾杯。
「object」類型的`clientVal`和`viewModelVal`?如果是這樣,那麼你的平等比較是比較盒裝版本,這應該是'假'。 – 2011-01-18 23:14:41