【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语句的代码规则,只要前面的不符合就会跳出,就不会执行到有错误的强制转换操作了。
相关文章
- 腾讯云微搭入选国际权威研究机构Forrester《2021年低代码平台中国市场现状分析报告》
- Java Swing编程:JTable表格
- Java Swing编程:JTree树
- Gitlab CI 在 Kubernetes 中的 Docker 缓存
- Java Swing编程:微调控制器和列表框
- 如何在 Helm Chart 中兼容不同的 Kubernetes 版本?
- Java Swing编程:进度条和滑动条
- Java Swing编程:Applet和JApplet
- Zoom支持自动生成字幕;SharePlay上线;Safari 更新导致大量bug |WebRTC风向
- Java Swing编程:拖放功能
- 【CSS】1140- Canvas 制作水波图实现原理
- Java Swing编程:特殊容器
- ClubHouse 上线支持Replay功能;WebOBS直播推流工具要流行起来了 |W
- 【优化】1141- 网页渲染性能优化 —— 渲染原理
- 一个基于PoS共识算法的区块链案例
- 代码分享:实现系统托盘效果
- kubernetes(k8s) 存储动态挂载
- Java Swing用户界面设计:序
- 如何建立条码标签上的群组
- 下一代音视频SDK的方案设计