两者之间的确切区别是什么?
// 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;
}
答案 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 keyword和typeof 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)
你的第一个陈述是对的
答案 4 :(得分:10)
typeof
返回Type
对象,该对象描述的T
不属于AClass
类型,因此is
返回false。
答案 5 :(得分:10)
typeof(T)是AClass返回false,因为typeof(T)是Type而AClass不从Type继承而