2012-11-26 257 views
3

可能重複:
C# ?: Conditional Operator「:」在這種情況下做什麼?

有人能解釋我這是什麼 「:」 在這種情況下怎麼辦?

var skupaj = dni + zacetniDan + (((dni + zacetniDan) % 7 != 0) ? 7 - ((dni + zacetniDan) % 7) : 0); 
+5

[三元運算符(http://msdn.microsoft.com/en-us/library/ty67wk28(V = VS.80) .aspx) – birryree

+1

[?:Operator](http://msdn.microsoft.com/en-us/library/ty67wk28.aspx) –

回答

8

:是三元運算符的一部分。它是if/else子句的簡碼。

實施例: int a = b > 5 ? 2 : 3;

相同:

int a = 0; 
if (b > 5) 
{ 
    a = 2; 
} 
else 
{ 
    a = 3; 
} 
+1

這實際上並不是對if/else的簡寫。它們在語義上相當不同。 *條件*運算符被解析爲*值*,而if/else子句不是;它完全存在於由if或else部分的陳述引起的副作用。雖然它與您給出的示例沒有密切關係,但例如,它可能會對局部變量生存期產生影響。因此,儘管將條件運算符看作是if/else的有用處,但它們不是*相同的。 – Servy

+0

@Servy你能舉一個例子說明它在哪裏有所作爲。我的頭繞着它纏了一點麻煩。謝謝! –

+1

@TomKiley'int result = Math.Sign(isTrue?-1:1);'。要用if/else編寫,你需要創建一個局部變量來計算傳遞給Sign的參數。目前正在創建一個不可見的本地變量,但它可能(也很可能會)的壽命比方法本身更短。要使用「if/else」,你可能需要爲整個方法的變量範圍。接下來考慮在類變量的級別(在這種情況下它可能更重要)執行該操作。'private int result = Math.Sign(true?-1:1);'。要做到這一點與if/else你需要使用一個構造函數。 – Servy

4

? :conditional operator簡寫形式的if/then /別的

第一部分是條件應該被評估爲布爾值其在?之前的表達式after ? is then part並且在條件爲ture時返回並且返回expression after : is else part並返回w母雞條件被評估爲假

+1

+1是唯一的答案(7)使用'?:'運算符的正確名稱。 – Servy

2

(((dni + zacetniDan)%7!= 0)? 7 - ((dni + zacetniDan)%7):0);

這是一種三元表達Condition?Expr1:Expr2

表達的結果是Expr1結果如果Condition爲真和Expr2否則結果。

你的具體情況的條件是

((dni + zacetniDan) % 7 != 0) 

如果這個條件爲真,則三元子表達式的結果將是

7 - ((dni + zacetniDan) % 7) 

否則爲0

1

三元操作符。它允許您將條件值視爲單個值。

這裏有一個基本的例子的布爾轉換成字符串

string str = myBool ? "true" : "false"; 

這相當於

string str 
if(myBool) 
    str = "true"; 
else 
    str = "false"; 
1

您可以很容易地通過分割3來理解?:的一條線。

  • 上的?左側期限爲
  • ?:之間的術語應該怎樣,如果條件爲真
  • :後,該術語應該怎樣,如果條件中使用使用的條件是假的
4

這是一個三元運算符。

這是代碼的以下等效的速記:

int skupaj = dni + zacetniDan; 

if ((dni + zacetniDan) % 7 != 0) { 
    skupaj += 7 - ((dni + zacetniDan) % 7); 
} 
else { 
    skupaj += 0; 
} 
相關問題