現在、引数として を使用する関数がありFunc<T1, T2>
ます。特定の状況で式ツリーをトラバースできるように、 as 引数
を使用する必要があります。Expression<Func<T1, T2>>
すべての呼び出しで関数を使用したいのでCompile()
、式が必要になります。すべての式を再コンパイルする必要がないように、それらを辞書に入れたいと思います。
私のメソッドへの呼び出しは次のようになります。
var foo = MyFunc(x => x.Field);
Expression
辞書のキーとしての使用に関して、次の解決策は正しいですか?
static Dictionary<Expression<Func<T1, T2>>, Func<T1, T2>> s_functions = new Dictionary<Expression<Func<T1, T2>>, Func<T1, T2>>();
public T2 MyFunc(Expression<Func<T1, T2>> selectorExpression)
{
if (!s_functions.ContainsKey(selectorExpression))
{
s_functions.Add(selectorExpression, selectorExpression.Compile());
}
Func<T1, T2> selector = s_functions[selectorExpression];
}
編集
パフォーマンスの観点からそれを解決する良い方法は何でしょうか?