Я пытаюсь создать Action для присвоения значения свойству объекта, определяемому строкой. До сих пор я придумал:
void Main()
{
var startPropertyName= "StartTime";
var endPropertyName= "EndTime";
var myAction = AssignValueToProperty<MyClass>(startPropertyName, DateTime.Today);
var myObject = new MyClass();
myAction(myObject);
myObject.StartTime.Dump();
}
public static Action<T> AssignValueToProperty<T>(string propertyName, DateTime value)
{
var arg = Expression.Parameter(typeof(T));
var property = Expression.Property(arg, propertyName);
var cons = Expression.Constant(value, typeof(DateTime));
var body = Expression.Assign(property, cons);
var exp = Expression.Lambda<Action<T>>(body, new ParameterExpression[] { arg });
return exp.Compile();
}
public class MyClass
{
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
}
Но я бы хотел передать параметр DateTime во время вызова Action, а не во время его создания. И, возможно, добавить еще один параметр для свойства EndTime.