is请参见 C# 关键字 | typeof | as | 运算符关键字 is 运算符用于检查对象的运行时类型是否与给定类型兼容。is 运算符用在以下形式的表达式中:expression is type 其中: expression 引用类型的表达式。 type 类型。 备注 如果满足下列两个条件,则 is 表达式计算为 true 值: expression 非 null。 expression 可以被转换为 type。也就是说,将完成形式 (type)(expression) 的转换表达式而不引发异常。有关更多信息,请参见 7.6.6 强制转换表达式。 如果已知 expression is type 表达式总是为 true 或总是为 false,则会发出编译时警告。不能重载 is 运算符。请注意,is 运算符只考虑引用转换、装箱转换和取消装箱转换。is 运算符不考虑其他转换(如用户定义的转换)。
as 运算符用于将一个值显式地转换(使用引用转换或装箱转换)为一个给定的引用类型。与强制转换表达式(第 7.6.6 节)不同,as 运算符从不引发异常。它采用的是:如果指定的转换不可能实施,则运算结果为 null。在 e as T 形式的运算中,e 必须是一个表达式,T 必须是一个引用类型。该运算的结果属于类型 T,且总是可归类为值类别。运算按下面这样计算: 如果 e 的编译时类型与 T 相同,则结果就是 e 的值。 否则,如果存在从 e 的编译时类型到 T 的隐式引用转换(第 6.1.4 节)或装箱转换(第 6.1.5 节),则执行该转换,且该转换的结果就是运算结果。 否则,如果存在从 e 的编译时类型到 T 的显式引用转换(第 6.2.3 节),则执行动态类型检查: 如果 e 的值为 null,则结果为具有编译时类型 T 的值 null。 否则,假设 R 为 e 引用的实例的运行时类型。如果 R 和 T 的类型相同,或者如果 R 为引用类型且存在从 R 到 T 的隐式引用转换,或者如果 R 为值类型且 T 是由 R 实现的一个接口类型,则结果为由 e 给定的具有编译时类型 T 的引用。 否则,结果为具有编译时类型 T 的值 null。 否则,指定的转换根本不可能实现,且发生编译时错误。 注意,as 运算符只执行引用转换和装箱转换。不可能使用 as 运算符执行其他转换(如用户定义的转换),应改为使用强制转换表达式来执行这些转换。
C# 关键字 | typeof | as | 运算符关键字
is 运算符用于检查对象的运行时类型是否与给定类型兼容。is 运算符用在以下形式的表达式中:expression is type
其中: expression
引用类型的表达式。
type
类型。
备注
如果满足下列两个条件,则 is 表达式计算为 true 值: expression 非 null。
expression 可以被转换为 type。也就是说,将完成形式 (type)(expression) 的转换表达式而不引发异常。有关更多信息,请参见 7.6.6 强制转换表达式。
如果已知 expression is type 表达式总是为 true 或总是为 false,则会发出编译时警告。不能重载 is 运算符。请注意,is 运算符只考虑引用转换、装箱转换和取消装箱转换。is 运算符不考虑其他转换(如用户定义的转换)。
否则,如果存在从 e 的编译时类型到 T 的隐式引用转换(第 6.1.4 节)或装箱转换(第 6.1.5 节),则执行该转换,且该转换的结果就是运算结果。
否则,如果存在从 e 的编译时类型到 T 的显式引用转换(第 6.2.3 节),则执行动态类型检查:
如果 e 的值为 null,则结果为具有编译时类型 T 的值 null。
否则,假设 R 为 e 引用的实例的运行时类型。如果 R 和 T 的类型相同,或者如果 R 为引用类型且存在从 R 到 T 的隐式引用转换,或者如果 R 为值类型且 T 是由 R 实现的一个接口类型,则结果为由 e 给定的具有编译时类型 T 的引用。
否则,结果为具有编译时类型 T 的值 null。
否则,指定的转换根本不可能实现,且发生编译时错误。
注意,as 运算符只执行引用转换和装箱转换。不可能使用 as 运算符执行其他转换(如用户定义的转换),应改为使用强制转换表达式来执行这些转换。
http://blog.csdn.net/Knight94/archive/2006/06/12/791850.aspx