日期:2014-05-17  浏览次数:20910 次

"is"和"as"关键字的转型,会有很大的运行时开销吗?
"is"和"as"都有运行时开销吗? 这个开销有多大呢?

------解决方案--------------------
开销肯定有的,类型不兼容时,它们都不会抛异常(强制转换会),as只能用于引用类型(编译错误)
而且有时候is会检查两次,比如
if(a is XX)
{
   var x = a as XX;
}
改成
var x = a as XX;
if(x != null)
{
}

------解决方案--------------------
开销非常小,几乎是可以忽略不记的。
至于楼上所说的检查两次是不存在的,确切的说是转换两次,is在转换后丢弃转换结果,而as会保留转换结果。但是is的使用场合明显更多,例如判断某类型是否为int时,你不能用as,只能用is。