【问题标题】:Ternary conditional operator: There is no implicit conversion between 'throw' and 'throw' c#三元条件运算符:'throw' 和 'throw' c# 之间没有隐式转换
【发布时间】:2021-09-10 17:57:32
【问题描述】:

我目前有:

if (isCritical)
    throw new CriticalException(a, b);
throw new FailException(a, b);

我想使用三元条件运算符,例如:

isCritical ? throw new CriticalException(a, b) : throw new FailException(a, b);

但我得到错误 'throw' 和 'throw' 之间没有隐式转换 这是否意味着不能在这里这样做还是我做错了?

【问题讨论】:

  • 你不能在三元运算上使用不同的返回类型,你需要为此做一个 if 语句,或者将 CriticalException 和 FailException 转换为相同类型的“Exception”才能工作
  • @MestreDosMagros:您似乎在讨论throw a? b: c,但问题是关于a? throw b: throw c
  • @MestreDosMagros:是的,但在这里不适用。 new CriticalException() 有一个类型。 throw new CriticalException() 没有。在两个分支中抛出相同的类型并不能解决问题。
  • @MestreDosMagros: 不...条件是bool,但是三元的结果类型可以是任何东西,结果和/或替代不是true或@987654329 @.
  • var ex = x ?新异常(“a”):新异常(“b”);扔前;

标签: c# asp.net-core exception .net-core


【解决方案1】:

即使你解决了类型问题,你也不能那样使用三元组。

三元运算符不能是独立语句。这也是不允许的:

a? f(): g();

但是,您可以throw的操作数使用三元:

throw (a? b: c)

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 2020-08-03
    • 2011-05-16
    • 2017-05-28
    • 2018-08-20
    • 2010-10-27
    相关资源
    最近更新 更多