怎麼樣:
public class User {
public string Name {get;set;}
}
public static void Main()
{
var user = new User();
var assigner = GetAssigner<User, string>(u => u.Name);
assigner.Compile()(user, "Joe");
Console.WriteLine(user.Name);
}
public static Expression<Action<TClass, TValue>> GetAssigner<TClass, TValue>(Expression<Func<TClass, TValue>> propertyAccessor){
var prop = ((MemberExpression)propertyAccessor.Body).Member;
var typeParam = Expression.Parameter(typeof(TClass));
var valueParam = Expression.Parameter(typeof(TValue));
return Expression.Lambda<Action<TClass, TValue>>(
Expression.Assign(
Expression.MakeMemberAccess(typeParam, prop),
valueParam), typeParam, valueParam);
}
記住的表達僅僅是一個應該做些什麼定義,你必須把它編譯成一個代表到能夠調用它。
可能重複的[如何使用表達式設置屬性值?](https://stackoverflow.com/questions/9601707/how-to-set-property-value-using-expressions) –
Expression.Assign into Expression。你的對象的屬性(作爲一個ConstantExpression或ParameterExpression取決於你如何使用它)傳遞你想分配的屬性的PropertyInfo – pinkfloydx33