Я думаю, что есть люди, которые могут ответить на этот вопрос, это вопрос из любопытства:
Общий CreateInstance
метод из System.Activator
, введенный в .NET v2, не имеет ограничений типа для общего аргумента, но требует конструктора по умолчанию для активированного типа, в противном случае создается MissingMethodException
. Для меня кажется очевидным, что этот метод должен иметь ограничение типа, например
Activator.CreateInstance<T>() where T : new() {
...
}
Просто упущение или какой-то анекдот, скрывающийся здесь?
Обновление
Как указано, компилятор не позволяет вам писать
private T Create<T>() where T : struct, new()
error CS0451: The 'new()' constraint cannot be used with the 'struct' constraint
Однако, см. комментарии, структура struct может использоваться как аргумент типа для общего метода, определяющего ограничение new(). При этом обстоятельстве данный ответ кажется единственной действительной причиной, чтобы не ограничивать метод...
Спасибо, что посмотрели!