赞
踩
由于对象是多态的,因此基类类型的变量可以保存派生类型。
若要访问派生类型的方法,需要将值强制转换回该派生类型。
不过,在这些情况下,如果只尝试进行简单的强制转换,会导致引发 InvalidCastException 的风险。
这就是 C# 提供 is 和 as 运算符的原因。
您可以使用这两个运算符来测试强制转换是否会成功,而没有引发异常的风险。
通常,as 运算符更高效一些,因为如果可以成功进行强制转换,它会实际返回强制转换值,转换不成功则返回null。
而 is 运算符只返回一个布尔值。因此,如果只想确定对象的类型,而无需对它进行实际强制转换,则可以使用 is 运算符。
as
0bject a=对象1;对象2 b=a as 对象1;(先将所要进行转换的对象转化为object,然后尝试将object转为想要转化成的对象)
is
object objTest = 11;
if ( objTest is int )
{
int nValue = (int )objTest;
}
摘抄自
https://blog.csdn.net/nanfang98394/article/details/71703009
所以解决 InvalidCastException报错的方法,就是在类型转换前先用 is 运算符增加一个上级判断,判断是否能进行转换。但是有时候加多一个判断会打乱我们的判断逻辑,于是便有个小技巧
if (event is Event2 && Eventlist.Contains((Event2)event) )
{
…
}
else
{
…
}
直接把 is 判断放在强制转换操作判断的前面,根据if语句的代码规则,只要前面的不符合就会跳出,就不会执行到有错误的强制转换操作了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。