zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

2023-03-20 14:57:06 时间

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