:
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으로 표현식을 복제 할 수 있습니다. 할당하려는 속성의 PropertyInfo를 전달하는 개체의 속성 (사용자가 사용하는 방법에 따라 ConstantExpression 또는 ParameterExpression으로) – pinkfloydx33