C#使用三元运算符抛异常提示throw间无隐式转换如何处理
问题原因
这个报错和C#版本、三元运算符的语法特性直接相关:
三元运算符属于表达式而非独立语句,要求两个分支必须返回可隐式转换的类型。C# 7.0之前throw是纯语句,没有返回类型,完全不满足三元运算符的类型要求,就会抛出你遇到的类型转换错误。
解决方案
方案1:C# 7.0及以上版本调整写法
C# 7.0开始支持throw作为表达式使用,但你需要给整个三元表达式加一个接收方,比如用弃元_接收结果即可正常运行:
_ = isCritical ? throw new CriticalException(a, b) : throw new FailException(a, b);
throw表达式支持隐式转换为任意类型,赋值给弃元完全合法,运行效果和你原来的if写法完全一致。
方案2:低版本C#/追求可读性
直接保留原来的if写法即可。分支抛异常的场景用if-else语义更清晰,可读性比强行用三元运算符更好。
内容的提问来源于stack exchange,提问作者user122222
相关产品推荐
相关产品推荐

