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

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

// 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; } 

你应该使用实例is AClass ,而不是比较types:

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

与基类和接口一起工作:

 MemoryStream stream = new MemoryStream(); bool isStream = stream is Stream; //true bool isIDispo = stream is IDisposable; //true 

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

请检查MSDN中的is关键字和typeof关键字

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 
  • typeof(T)返回一个Type对象
  • Type不是AClass,因为Type不是从AClass派生的

你的第一个说法是对的

typeof返回一个描述TType对象,它不是AClasstypes的,因此返回false。

  • 首先比较两个Type对象(types本身是.net中的对象)
  • 其次,如果写得好(myObj是AClass),检查两种types之间的兼容性。 如果myObj是一个从AClassinheritance的类的实例,它将返回true。

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