私は、次のコードに問題が生じています: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);
これは問題なく動作します。
問題は次のとおりです。リフレクションコードは、「val1!= val2」文が正しくない(またはそう思われる)かどうかを評価します。このコードをステップ実行すると、基本的に "1は1と等しくない"と表示され、誤ってエラーが追加されます。コード、clientVal = 1とviewModelVal = 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を返す:私はこのコードでこれをテストする場合はさらに、私は同じ一見偽結果を得ます。
これで任意の助けいただければ幸いです!
ありがとうございます。
Tim。
編集:あなたにすべての答えを与えてもらえますか?最後はシンプルだったのがうれしい。助けてくれてありがとう。乾杯。
'client'型と' viewModelVal'型は 'object'ですか?もしそうなら、あなたの等価比較はboxed版を比較しています。これは 'false'でなければなりません。 –