2011-05-15 108 views
2
using System; 
using System.Reflection; 

namespace App 
{ 
    public class A<T> 
    { 
    public WonderfulClass<T> field; 
    } 

    public class WonderfulClass<T> { } 

    class Programm 
    { 
    static void Main(string[] args) 
    { 
     Type t = typeof(A<>); 

     Type t1 = t.GetField("field").FieldType; 
     Type t2 = typeof(WonderfulClass<>); 

     //Why t1 and t2 are different? 
     Console.WriteLine(t1 == t2 ? "Equal" : "Not Equal"); 
    } 
    } 
} 

回答

7

如果檢查的屬性,你會發現:

t2.IsGenericTypeDefinition 
true 
t1.IsGenericTypeDefinition 
false 

因此而t2是一個實際的定義,t1已經有它的應用泛型類型參數。

注意以下幾點:

t1.GetGenericTypeDefinition() == t2 
true 
+1

謝謝,感謝您的關注!:) – user754348 2011-05-15 10:25:18

2

你的困惑是因爲你有兩個完全不同的東西具有相同的名稱,T.如果你說:

class A<T> 
{ 
    B<T> b1; 
} 
class B<U> 
{ 
    B<U> b2; 
} 

現在應該更清楚。編譯時類型A<T>.b1B<T>。編譯時類型B<U>.b2B<U>B<T>B<U>是不同的類型。

相關問題