3
我需要爲類中的所有字段創建表達式。 所以我採用this post我的需求:使用表達式樹設置字段值
public static void Sample()
{
var setters = GetFieldSetterExpressions<Account>();
var myAccount = new Account();
setters["AccounHolder"](myAccount, "Giovanni");
setters["Pin"](myAccount, 123);
}
public static Dictionary<string, Action<T, object>> GetFieldSetterExpressions<T>() where T: class
{
var dic = new Dictionary<string,Action<T,object>>();
var type = typeof(T);
var fields = type.GetFields();
foreach (var fieldInfo in fields)
{
Type fieldType;
if (IsNullableType(fieldInfo.FieldType))
fieldType = Nullable.GetUnderlyingType(fieldInfo.FieldType);
else
fieldType = fieldInfo.FieldType;
ParameterExpression targetExp = Expression.Parameter(type, "target");
ParameterExpression valueExp = Expression.Parameter(fieldType, "value");
MemberExpression fieldExp = Expression.Field(targetExp, fieldInfo);
BinaryExpression assingExp = Expression.Assign(fieldExp, valueExp);
var setter = Expression.Lambda<Action<T, object>>(assingExp, targetExp, valueExp).Compile();
dic.Add(fieldInfo.Name, setter);
}
return dic;
}
我的問題是,因爲Expression.Lambda<Action<T,object>>(..)
領域例如可以是字符串,我得到一個exeption。 我試圖在我的代碼片段中整合Expression.Convert
,但無法弄清楚如何實現它。
我如何需要將轉換部分集成到我的代碼中?
你可以顯示你正在嘗試構建的整個方法(包括簽名)嗎? –
@IvanStoev更新代碼:基本上(簡化)我想要做的事情。感謝您的支持。 – gsharp
我明白了。那麼答案應該適用於你,我會刪除第一句話。 –