Как эффективно кэшировать методы, скомпилированные из дерева выражений?
public void SomeToStringCalls()
{
ToString(i => (i + 1).ToString(), 1);
ToString(i => (i + 1).ToString(), 2);
ToString(i => (i + 2).ToString(), 3);
ToString(i => (i + 2).ToString(), 4);
}
private string ToString<T>(Expression<Func<T, string>> expression, T input)
{
var method = expression.Compile();
return method.Invoke(input);
}
Выше, каждый вызов собирается перекомпилировать каждое выражение, даже если некоторые из них идентичны. Я не могу кэшировать Dictionary<Expression<Func<T, string>>, Func<T, string>>()
скомпилированный метод из выражения, потому что equals
завершится с ошибкой.