Рассмотрим фрагмент кода ниже:
public class A<T> { }
public class B<T> : A<T> { }
В таком случае:
var a = typeof(A<>).GenericTypeArguments.Length;
a
имеет значение 0
, что неудивительно. Это, однако, как-то неожиданно для меня:
var b = typeof(B<>).BaseType.GenericTypeArguments.Length;
где b
имеет значение 1
. Поэтому он закрывается с использованием несуществующего типа имени "T", и только выполнение GetGenericTypeDefinition
на нем заставляет его снова открываться. Почему это?