假设我有一个对象的实例,该对象属于某个子类型的子类,该对象通过C#中的父类(super class)型的引用传递给我,我习惯于以这种类似于Java的方式进行类型转换(假定“引用”为的父类型):

if (reference is subtype){
subtype t = (subtype)reference;
}

但是最近我遇到了这样的例子:
if (reference is subtype){
subtype t = reference as subtype;
}

那两个完全相等吗?有什么区别吗?

最佳答案

它们的使用方式相同,但都不是最佳选择。您应该只进行一次类型检查:

subtype t = reference as subtype;
if (t != null) {
   ...
}

检查null比检查类型更有效。

10-07 14:26