反射获取所有GenericParameterAttributes
本文关键字:GenericParameterAttributes 获取 反射 | 更新日期: 2023-09-27 18:29:09
我需要在MClass 中获得通用参数T的所有GenericParameterAttributes
public class MClass<T>:IEnumerable<T> where T : class,IComparable, new()
{
//some body here
}
所以我用这种方式尝试:
Assembly asm = Assembly.LoadFrom("M.dll");
Type some_type = asm.GetType("M.MClass`1");
Type[] generic_args = { typeof(MyTestClass) };
if (some_type.IsGenericType)
{
Console.WriteLine("Generic Type: {0}", some_type.ToString());
Console.WriteLine("Where T : {0}", some_type.GetGenericArguments()[0].GenericParameterAttributes);
some_type = some_type.MakeGenericType(generic_args);
}
但由于某些原因,预言GenericParameterAttributes显示T必须是具有默认构造函数的类,但没有显示T也必须具有IComparable也尝试过这种方式:
这是有效的,但不要忘记在更改后重建项目)
static void Main()
{
Assembly asm = Assembly.LoadFrom("M.dll");
Type some_type = asm.GetType("M.MClass`1");
if (some_type.IsGenericType)
{
var generic_argument =some_type.GetGenericArguments()[0];
var generic_parameter_constraints =generic_argument.GetGenericParameterConstraints();
Console.WriteLine(generic_parameter_constraints.Length);
Console.ReadLine();
}
}
您可以在以下泛型参数类型上调用GetGenericParameterConstraints
:
var generic_argument =
some_type
.GetGenericArguments()[0]; //This will give you the generic argument which is T in your example.
var generic_parameter_constraints =
generic_argument
.GetGenericParameterConstraints(); //This will give you an array of types that present the type constraints on the generic argument T
在您的情况下,generic_parameter_constraints
将包含一个Type
数组,该数组具有一个元素typeof(IComparable)
。