Это немного быстрее, поскольку выражение компилируется только один раз:
public class Foo<T> where T : new()
{
static Expression<Func<T>> x = () => new T();
static Func<T> f = x.Compile();
public static T build()
{
return f();
}
}
При анализе производительности этот метод так же быстр, как и более многословное скомпилированное выражение, и намного, намного быстрее, чем new T()
(в 160 раз быстрее на моем тестовом ПК).
Для чуть более высокой производительности можно исключить вызов метода сборки и вместо него можно вернуть функтор, который клиент может кэшировать и вызывать напрямую.
public static Func<T> BuildFn { get { return f; } }