【发布时间】:2010-03-10 17:24:10
【问题描述】:
假设我有以下表达式:
Expression<Action<T, StringBuilder>> expr1 = (t, sb) => sb.Append(t.Name);
Expression<Action<T, StringBuilder>> expr2 = (t, sb) => sb.Append(", ");
Expression<Action<T, StringBuilder>> expr3 = (t, sb) => sb.Append(t.Description);
我希望能够将它们编译成等效于以下内容的方法/委托:
void Method(T t, StringBuilder sb)
{
sb.Append(t.Name);
sb.Append(", ");
sb.Append(t.Description);
}
解决此问题的最佳方法是什么?我希望它表现良好,理想情况下具有与上述方法相当的性能。
更新 因此,虽然似乎没有办法直接在 C#3 中执行此操作,但有没有办法将表达式转换为 IL,以便我可以将它与 System.Reflection.Emit 一起使用?
【问题讨论】:
-
你希望能够写出类似的东西:
Expression<Action<T, StringBuilder>> combinedExperssion = expr1 + expr2 + expr3;?
标签: c# linq lambda dynamicmethod