Далеко не факт, что даже на минутку хардкода потянет, но мне было интересно изучать этот вопрос.
Про new() ограничение тут все, наверняка знают, во что это выливается. Но мне было интересно, как можно эту проблему обойти, чтобы получить на выходе обобщенную фабрику, сравнимую по скорости с вызовом делегата, создающего экземпляр конкретного типа. Оказалось, что можно, хоть и через кодогенерацию.
В общем, все это вылилось в очередной long read:
Dissecting the new() constraint in C#: a perfect example of a leaky abstraction