Я думаю, что есть люди, которые могут ответить на этот вопрос, из любопытства:
Универсальный метод 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
Однако, см. Комментарии, структура может использоваться в качестве аргумента типа для универсального метода, задающего ограничение new ().При таких обстоятельствах данный ответ кажется единственной уважительной причиной не ограничивать метод ...
Спасибо за просмотр!