0
我想向表達式樹添加一個額外的方法調用,但是我很困惑如何實現它。以下是我目前正在工作:在表達式樹中調用有條件的方法
private static Action<object, object> CreateSetter(SetterInfo info)
{
var propertyInfo = info.Type.GetProperty(info.Name, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
if (propertyInfo == null)
return (s, v) => { };
var objParameter = Expression.Parameter(typeof(object));
var valueParameter = Expression.Parameter(typeof(object));
//This is the method call I'm trying to add
if (info.Name[0] == 'G' && info.Type.Name == TaxDataConstant.ParcelFeat)
{
var convertParcelFeatCall = Expression.Call(ConvertParcelFeatMethod, valueParameter, Expression.Constant(info.Name));
}
var changeTypeCall = Expression.Call(ChangeTypeMethod, valueParameter, Expression.Constant(propertyInfo.PropertyType));
var objCast = Expression.Convert(objParameter, info.Type);
var valueCast = Expression.Convert(changeTypeCall, propertyInfo.PropertyType);
var property = Expression.Property(objCast, propertyInfo);
var assignment = Expression.Assign(property, valueCast);
var lambda = Expression.Lambda<Action<object, object>>(assignment, objParameter, valueParameter);
return lambda.Compile();
}
我希望發生的是:
1)如果我SetterInfo對象類型的名稱是ParcelFeat和屬性名以「G '我想調用valueParameter上的ConvertParcelFeat,然後在返回時調用ChangeType。
2)如果類型的名稱超過ParcelFeat調用一changeType正常其他任何與出額外的步驟
我感到困惑的是如何建立的條件。我假設我在上面的代碼中做的方式是錯誤的,我需要使用類似Expression.IfThen()來構建條件。我也不確定如何像我想要的那樣鏈接方法調用。
你不Expression.IfThen需要,因爲每個特定SetterInfo你把只有一個特定的λ例如 – Victor
只需插入convertParcelFeatCall在ExpressionTree和所有適當的地方應該工作得很好 – Victor