我正在查看另一个问题,该问题说明 Expression 如何比反射快得多,因为它可以预编译为 IL。
我不确定如何使用它。这是用于 Value Oject(在 DDD 意义上)的基类中使用的一些代码,其基本思想是使用所有公共属性的值来确定相等性,它通过反射获得。通过使用此基类,您无需为具有值对象的子类实现相等性。
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 重写此代码?
干杯,
贝里尔