为什么这种类型不平等?

时间:2011-05-15 10:05:19

标签: c# types

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");
    }
  }
}

2 个答案:

答案 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>是不同的类型。