我有以下代碼: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