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");
}
}
}
答案 0 :(得分:7)
如果您检查属性,您会注意到:
t2.IsGenericTypeDefinition
true
t1.IsGenericTypeDefinition
false
因此,虽然t2
是实际定义,但t1
已经应用了它的泛型类型参数。
请注意以下事项:
t1.GetGenericTypeDefinition() == t2
true
答案 1 :(得分:2)
你的困惑是因为你有两个完全不同的东西,同名,T。如果你说:
class A<T>
{
B<T> b1;
}
class B<U>
{
B<U> b2;
}
现在应该更清楚了。 A<T>.b1
的编译时类型为B<T>
。 B<U>.b2
的编译时类型为B<U>
。 B<T>
和B<U>
是不同的类型。