2016-11-16 88 views
-3

我想做出以下的條件,但它的錯誤。可以做些什麼來使其正確?在三元運算符內使用

row["Total Serviceable Offers"].ToString() == "a" || "b" ? "0" : "c"; 

我們能否||在三元狀態?

+4

只是不要......長手版本將更具可讀性 – Liam

+0

與@Liam同意。只要你在那裏拋出第二個條件,你就有點擊敗了使用簡寫的目的。 –

+0

@DangerZone我有一半同意,如果你有兩個條件表示爲'or',我感覺好像三元組沒有問題,但是如果你使用'else',那麼它失去了它的目的 –

回答

3
string theRow = row["Total Serviceable Offers"].ToString(); 
(theRow == "a" || theRow == "b") ? "0" : "c"; 
0

我剛剛在一個測試程序中運行int f = (g > 0 || h > 0) ? j : k;,它沒有錯誤,所以幾乎可以。

只要小心邏輯,祝你好運。

1

您正在尋找這樣的語法

(row["Total Serviceable Offers"].ToString() == "a" || row["Total Serviceable Offers"].ToString() == "b") ? "0" : "c"; 

不過我更傾向於短期的做法與Contains()

new[]{"a","b"}.Contains(row["Total Serviceable Offers"].ToString()) ? "0" : "c"; 
3

我們能否||三元條件裏面?

是的,可以。但是,您在
row["Total Serviceable Offers"].ToString() == "a"(一個布爾表達式)和"b"(這是一個字符串表達式)之間執行的方式爲||。這就是爲什麼你的代碼不能編譯。

您可以將其更改爲ContainsAny表達式,或者如果比您的代碼片段顯示的比較數多,則可以創建一個輔助方法。

以下幾種方法來重寫你的表達:

new[]{"a", "b"}.Contains(row["Total Serviceable Offers"].ToString()) ? "0" : "c"; 
new[]{"a", "b"}.Any(s => s == row["Total Serviceable Offers"].ToString()) ? "0" : "c"; 
IsAorB(row["Total Serviceable Offers"].ToString()) ? "0" : "c"; 

... 

bool IsAorB(string s) { 
    return s == "a" || s == "b"; 
}