2013-04-04 21 views
3

假設我有一個循環內的簡寫的if-else語句在這種情況下:如何通過簡寫「if-else」結果來打破循環?

for(...) 
{ 
    a = b == c ? b : c; 
    // More unnecessary code if the result was true. 
} 

而且我想通過條件的結果打破循環:

for(...) 
{ 
    a = b == c ? b break : c; 
    // Now the unnecessary code is not executed. 
} 

我實現一個完整的方式在這個例子中,我可以只鍵入:

for(...) 
{ 
    if(b == c) 
    { 
     a = b; 
     break; 
    } 
    else 
    { 
     a = c; 
    } 
    // Now the unnecessary code is not executed. 
} 

但它是太長,我想有一個單一的線S每次突破條件因此有幾個。

+9

這是不可能的。 – 2013-04-04 15:41:40

+2

+這是一個非常醜陋的做法。您確定您瞭解編程和OOP的基礎知識?這與乾淨的編碼風格無關。 – walther 2013-04-04 15:42:52

+5

根據你的代碼,你可以寫'a = c; if(b == c)break;' – Servy 2013-04-04 15:43:25

回答

2

這裏是關於三元運營商的一些信息,它的用途:?: Operator (C#)

你想要做的僅僅是不可能的......這不是它的工作原理。

5

您可以使用縮短的語法而不使用三元運算符,但是您嘗試執行的操作是不可能的。如果在if中有break聲明,則您也不需要else

for (...) 
{ 
    if (b == c) { a = b; break; } 

    a = c; 
    // More code if b does not equal c 
} 
+0

Ew ...我真的不喜歡這種格式化條件塊的方式。 – anaximander 2013-04-04 15:48:53

+1

@anaximander我同意,但似乎在一條線上得到它對於OP來說很重要。 – itsme86 2013-04-04 15:49:55

2

對於你給的例子,你可以重組這麼

for (int i = 0; i < count && b != c; ++i) 
{ 
    if(b != c) 
    { 
     // code 
    } 
} 
a = b; 

但是,你想(從三元內休息)做具體的事情是不可能的。

1

三元運算符(即「簡寫if-else」)僅用於評估基於布爾值的兩個語句之一。它不像if這樣的流量控制結構;它實際上返回它執行的語句的結果。你不能用它來執行那樣的代碼。

如果你要結束一個很長的else-if-else-if鏈,考慮重構一點。有可能用switch塊代替它。

1

爲測試製作功能。如果它被重用,至少比你的例子更短。

int a; 
if(TryEqual(b, c, out a)) 
    break; 

bool TryEqual(int x, int y, out res) 
{ 
    if(x == y) 
    { 
     res = x; 
     return true; 
    } 
    res = y; 
    return false; 
} 
0

我想出了這個解決方案。

for (...) 
{ 
    if ((b == c ? (a=b) == a : (a=c) != a)) break; 
} 

當然,細心的讀者會發現,你可以總是分配a=c然後當且僅當b==c打破,因爲這將是等效的。

for (...) 
{ 
    a = c; if (b==c) break; 
} 

即約,因爲它是會得到,同時仍保持那些討厭的if-else結構合併到一個單一的線路是短而優雅。