typeof和is关键字有什么区别?

时间:2011-10-14 09:06:37

标签: c# generics types

两者之间的确切区别是什么?

// When calling this method with GetByType<MyClass>()

public bool GetByType<T>() {
    // this returns true:
    return typeof(T).Equals(typeof(MyClass));

    // this returns false:
    return typeof(T) is MyClass;
}

6 个答案:

答案 0 :(得分:59)

您应该在实例上使用is AClass而不是比较类型:

var myInstance = new AClass();
var isit = myInstance is AClass; //true

is也适用于基类和接口:

MemoryStream stream = new MemoryStream();

bool isStream = stream is Stream; //true
bool isIDispo = stream is IDisposable; //true

答案 1 :(得分:33)

is关键字检查对象是否属于某种类型。 typeof(T)的类型为Type,而不是AClass类型。

检查MSDN以查找is keywordtypeof keyword

答案 2 :(得分:25)

typeof(T)会返回Type个实例。并且Type永远不会等于AClass

var t1 = typeof(AClass)); // t1 is a "Type" object

var t2 = new AClass(); // t2 is a "AClass" object

t2 is AClass; // true
t1 is AClass; // false, because of t1 is a "Type" instance, not a "AClass" instance

答案 3 :(得分:11)

  • typeof(T)返回一个Type对象
  • Type不是AClass,因为Type不是从AClass
  • 派生的,所以不能

你的第一个陈述是对的

答案 4 :(得分:10)

typeof返回Type对象,该对象描述的T不属于AClass类型,因此is返回false。

答案 5 :(得分:10)

  • 首先比较两个Type对象(类型本身是.net中的对象)
  • 第二,如果写得好(myObj是AClass),请检查两种类型之间的兼容性。如果myObj是继承自AClass的类的实例,则返回true。

typeof(T)是AClass返回false,因为typeof(T)是Type而AClass不从Type继承而