ILにプリコンパイルできるため、Expressionがリフレクションよりも大幅に高速になる方法を述べた別の質問を見ていました。
私はそれを使用する方法がよくわかりません。以下は、(DDD の意味での) 値オブジェクトの基本クラスで使用されるコードです。基本的な考え方は、すべてのパブリック プロパティの値を使用して、リフレクションを介して取得する等価性を判断することです。この基本クラスを使用すると、Value Object を持つサブクラスに等価性を実装する必要がなくなります。
protected virtual bool HasSameObjectSignatureAs(BaseObject compareTo)
{
var signatureProperties = GetType().GetProperties();
foreach (var property in signatureProperties)
{
var valueOfThisObject = property.GetValue(this, null);
var valueOfCompareTo = property.GetValue(compareTo, null);
if (valueOfThisObject == null && valueOfCompareTo == null) {
continue;
}
if ((valueOfThisObject == null ^ valueOfCompareTo == null) ||
(!valueOfThisObject.Equals(valueOfCompareTo))) {
return false;
}
}
Expression を使用してこのコードをどのように書き直しますか?
乾杯、
ベリル