2017-02-13 74 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