2016-01-06 20 views
0

我需要得到所有GenericParameterAttributes泛型參數T在MClass思考讓所有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); 
      } 

但在某些原因propherty 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(); 
} 

    } 

回答

0

您可以在一般的參數類型這樣的調用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)

+0

已嘗試allready ... GetGenericParameterConstraints()返回空數組 – Spam

+0

您稱此方法爲哪個對象? –

+0

與你寫的一樣 some_type.GetGenericArguments()[0] return T – Spam