【C#】尝试类型转换异常System.InvalidCastException: Specified cast is not valid.解决方案

由于对象是多态的,因此基类类型的变量可以保存派生类型。
若要访问派生类型的方法,需要将值强制转换回该派生类型。
不过,在这些情况下,如果只尝试进行简单的强制转换,会导致引发 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语句的代码规则,只要前面的不符合就会跳出,就不会执行到有错误的强制转换操作了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值