Ответ 1
По-видимому, это невозможно сделать в С#, вы должны указать либо оба параметра типа, либо none.
И это тоже не поддерживается CLR, A<int>.B<>
и A<string>.B<>
относятся к одному типу:
Type t1 = typeof(A<int>).GetNestedType("B`1");
Type t2 = typeof(A<string>).GetNestedType("B`1");
// t1.Equals(t2) is true
Вложенным типом обоих типов является A<>
(открытый общий тип)
EDIT: дальнейшее тестирование показывает, что typeof(A<int>.B<string>)
на самом деле является типичным типом arity 2, а не вложенным родовым типом arity 1... typeof(A<int>.B<string>).GetGenericArguments()
возвращает массив с typeof(int)
и typeof(string)
. Таким образом, typeof(A<int>.B<>)
фактически эквивалентен (A.B)<int, >
, который не поддерживается (общий тип не может быть частично закрыт)