我有以下代码:C#运算符?并抛出异常
public int Number(int x)
{
return x > 0 ? x : throw new Exception();
}
我们的目标很简单,与运营商“?”我想检查一些值,如果它满足条件返回该值,如果没有 - 抛出一些错误。 但VS智能感知说:无效的表达式投掷;我是否被迫使用其他操作员?
P.S.我想这跟return throw new Exception();
一样,但还是要确定。
我有以下代码:C#运算符?并抛出异常
public int Number(int x)
{
return x > 0 ? x : throw new Exception();
}
我们的目标很简单,与运营商“?”我想检查一些值,如果它满足条件返回该值,如果没有 - 抛出一些错误。 但VS智能感知说:无效的表达式投掷;我是否被迫使用其他操作员?
P.S.我想这跟return throw new Exception();
一样,但还是要确定。
写这个:
public int Number(int x)
{
if(x <= 0) throw new Exception();
return x;
}
有条件的运营商需要一个共同的基础型式,返回,但没有为int
和Exception
。特别是投掷东西是不一样的返回东西,所以即使你的方法将返回和Exception
(这很奇怪),这是不可能的。
从MSDN:
要么first_expression和second_expression的类型必须是相同的,或隐式转换必须存在从一种类型到另一个。
With?表达双方必须返回相同的类型,这是不正确的在你的情况。与 if(x > 0) return x throw new Exception();
更换可以在C#这样做7.你的方法可以进一步收缩到:
public int Number(int x) => x > 0 ? x : throw new Exception();
此前C#7.0,如果你想从一个表达式身体,你将不得不抛出一个异常到:
return x > 0 ? x : new Func<int>(() => { throw new Exception(); })();
在C#7.0以上现简化为:
return x > 0 ? x : throw new Exception();
后者是否只是前者的语法糖? – HimBromBeere
是的,这不是高等运营商的工作原理。 –
如果我没有弄错,这已经在C#7中引入了。 – ColinM