web-dev-qa-db-ja.com

LambdaExpressionを実行し、戻り値をオブジェクトとして取得する

これを行うためのクリーンな方法はありますか?

Expression<Func<int, string>> exTyped = i => "My int = " + i;
LambdaExpression lambda = exTyped;

//later on:

object input = 4;
object result = ExecuteLambdaSomeHow(lambda, input);
//result should be "My int = 4"

これは、さまざまなタイプで機能するはずです。

29
Joel

確かに...ラムダをコンパイルしてから呼び出す必要があります...

object input = 4;
var compiledLambda = lambda.Compile();
var result = compiledLambda.DynamicInvoke(input);

Styxxyはすばらしい点を持ち出します...コンパイラーに手伝ってもらったほうがよいでしょう。以下のコードのようにコンパイルされた式では、入力と結果の両方が強く型付けされていることに注意してください。

var input = 4;
var compiledExpression = exTyped.Compile();
var result = compiledExpression(input);
35
Kevin