返回 Type 对象数组,这些对象表示为构造类型提供的类型变量,或泛型类型定义的类型参数。 如果是MyList<int,Person> ,则返回int和Person类型的数组,如同Type[] tpyes={typeof(int),typeof(Person)},Type数组中任一参数的IsGenericParameter为false; 如果是MyList<,>或,则返回T和U类型的数组,这时得到的Type数组中的任一参数的IsGenericParameter属性为true,因为MyList<T,U>是泛型类型的初始定义
GetGenericTypeDefinition
返回当前构造类型的基础泛型类型定义。 返回一个基础定义的Type,如MyList<T,U>,可以用来构造其他泛型类型定义。 Type t = typeof(Stack<>); //获取基础泛型类型定义,即Stack<T>,这时可用defType定义其他的泛型类型,比如Stack<Person> Type defType = t.GetGenericTypeDefinition();
if(defType.IsGenericTypeDefinition) { Type dType = defType.MakeGenericType(typeof(Person)); Console.WriteLine(dType.IsGenericTypeDefinition); }
GetGenericParameterConstraints
如果泛型类型的类型参数T有参数约束,且这些约束参数是自定义的类型(如Person)或其他可以用来实例化对象的类型,不是class、struct等关键字的话,则可用该方法获取这些参数约束的类型。该方法会返回一个Type数组。 如: //这个会返回Type[] type={typeof(Person)} public class Stack<T> where T:Person {}
//这个返回的Type数组的length为0 public class Stack<t> where T:class{}
ContainsGenericParameters
如果类型或其任意封闭类型或方法包含没有被提供特定类型的类型参数,则返回 true。 即: //提供了特定类型参数Person Type t = typeof(Stack<Person>); //返回false Console.WriteLine(t.ContainsGenericParameters);
//没有提供特定类型参数 Type t = typeof(Stack<>); //返回true Console.WriteLine(t.ContainsGenericParameters);