2 つのオブジェクト配列が与えられた場合、2 つの違いを比較する必要があります (文字列に変換された場合)。コードを次のように縮小しましたが、問題はまだ存在します。
public void Compare(object[] array1, object[] array2) {
for (var i = 0; i < array1.Length; i++) {
var value1 = GetStringValue(array1[i]);
var value2 = GetStringValue(array2[i]);
}
}
public string GetStringValue(object value) {
return value != null && value.ToString() != string.Empty ?
value.ToString() : "No Value";
}
どのオブジェクト配列をスローしても、コードは正常に実行されます。ただし、配列内の項目の 1 つが参照型である場合は、参照が何らかの形で更新されます。これにより、後で問題が発生します。
これは、オブジェクト参照に対して ToString() を呼び出すときに発生するようです。GetStringValue メソッドを次のように更新し (オブジェクトが値型または文字列であることを確認します)、問題は解決しました。
public string GetStringValue(object value) {
return value != null && (value.GetType().IsValueType || value is string)
&& value.ToString() != string.Empty ? value.ToString() : "No Value";
}
ただし、参照型の ToString() メソッドをオーバーライドして比較できるようにしたいので、これは一時的なハックにすぎません。
誰かがなぜこれが起こっているのかを説明し、潜在的な解決策を提供していただければ幸いです。ありがとう
編集:
私のアプリケーションをさらに説明するのに役立ちます。このコードは、NHibernate イベント リスナーから取得したものです。問題は、NHibernate が遅延読み込みを処理するためにクラスの周りに独自のラッパーを追加することにあると思います。スローされるエラーは次のとおりです。
コレクション [ * ] は flush() によって処理されませんでした