Это происходит потому, что default(T)
возвращает null
, поскольку T
представляет ссылочный тип. Значения по умолчанию для ссылочных типов: null
.
Вы можете изменить свой метод на:
public static T Test<T>(MyClass myClass) where T : MyClass2, new()
{
var result = new T();
...
}
и тогда он будет работать так, как вы хотите. Конечно, MyClass2
и его потомки теперь должны иметь конструктор без параметров.