反射获取所有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();
}
    }

反射获取所有GenericParameterAttributes

您可以在以下泛型参数类型上调用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)

相关文章:
  • 没有找到相关文章