Когда у вас есть такой код:
static T GenericConstruct<T>() where T : new()
{
return new T();
}
Компилятор C # настаивает на вызове Activator.CreateInstance, что значительно медленнее, чем собственный конструктор.
У меня есть следующий обходной путь:
public static class ParameterlessConstructor<T>
where T : new()
{
public static T Create()
{
return _func();
}
private static Func<T> CreateFunc()
{
return Expression.Lambda<Func<T>>( Expression.New( typeof( T ) ) ).Compile();
}
private static Func<T> _func = CreateFunc();
}
// Example:
// Foo foo = ParameterlessConstructor<Foo>.Create();
Но для меня не имеет смысла, зачем нужен этот обходной путь.
Activator::CreateInstanceдля общих,classиstructureограничений. - person Mark Hurd   schedule 16.05.2014