2017-02-13 70 views
1

我有以下代码:C#运算符?并抛出异常

public int Number(int x) 
{ 
    return x > 0 ? x : throw new Exception(); 
} 

我们的目标很简单,与运营商“?”我想检查一些值,如果它满足条件返回该值,如果没有 - 抛出一些错误。 但VS智能感知说:无效的表达式投掷;我是否被迫使用其他操作员?

P.S.我想这跟return throw new Exception();一样,但还是要确定。

+0

是的,这不是高等运营商的工作原理。 –

+2

如果我没有弄错,这已经在C#7中引入了。 – ColinM

回答

7

写这个:

public int Number(int x) 
{ 
    if(x <= 0) throw new Exception(); 
    return x; 
} 

有条件的运营商需要一个共同的基础型式,返回,但没有为intException。特别是投掷东西是不一样的返回东西,所以即使你的方法将返回Exception(这很奇怪),这是不可能的。

MSDN

要么first_expression和second_expression的类型必须是相同的,或隐式转换必须存在从一种类型到另一个。

-1

With?表达双方必须返回相同的类型,这是不正确的在你的情况。与 if(x > 0) return x throw new Exception();

4

更换可以在C#这样做7.你的方法可以进一步收缩到:

public int Number(int x) => x > 0 ? x : throw new Exception(); 
1

此前C#7.0,如果你想从一个表达式身体,你将不得不抛出一个异常到:

return x > 0 ? x : new Func<int>(() => { throw new Exception(); })(); 

在C#7.0以上现简化为:

return x > 0 ? x : throw new Exception(); 
+0

后者是否只是前者的语法糖? – HimBromBeere