Нет никакого способа указать «ноль» для параметра универсального типа - если вы объявляете их в классе, они обязательны при использовании этого класса.
Если подумать, это имеет смысл, потому что без T2
ваш класс будет частично неопределенным, а это не то, с чем машины могут справиться хорошо.
Что вам, вероятно, нужно сделать, это разделить ваш класс на две части. Во-первых, ваш класс без детей:
class Widget<T>
{
public T MyObject { get; set; }
}
Затем расширение, которое добавляет поддержку для детей:
class WidgetWithChildren<T,T2>: Widget<T>
{
public IList<Widget<T>> MyChildren { get; set; }
}
Хотя это только частичное решение, так как вы не можете справиться с внуками.