有人能解釋我這是什麼 「:」 在這種情況下怎麼辦?
var skupaj = dni + zacetniDan + (((dni + zacetniDan) % 7 != 0) ? 7 - ((dni + zacetniDan) % 7) : 0);
有人能解釋我這是什麼 「:」 在這種情況下怎麼辦?
var skupaj = dni + zacetniDan + (((dni + zacetniDan) % 7 != 0) ? 7 - ((dni + zacetniDan) % 7) : 0);
:
是三元運算符的一部分。它是if
/else
子句的簡碼。
實施例: int a = b > 5 ? 2 : 3;
相同:
int a = 0;
if (b > 5)
{
a = 2;
}
else
{
a = 3;
}
這實際上並不是對if/else的簡寫。它們在語義上相當不同。 *條件*運算符被解析爲*值*,而if/else子句不是;它完全存在於由if或else部分的陳述引起的副作用。雖然它與您給出的示例沒有密切關係,但例如,它可能會對局部變量生存期產生影響。因此,儘管將條件運算符看作是if/else的有用處,但它們不是*相同的。 – Servy
@Servy你能舉一個例子說明它在哪裏有所作爲。我的頭繞着它纏了一點麻煩。謝謝! –
@TomKiley'int result = Math.Sign(isTrue?-1:1);'。要用if/else編寫,你需要創建一個局部變量來計算傳遞給Sign的參數。目前正在創建一個不可見的本地變量,但它可能(也很可能會)的壽命比方法本身更短。要使用「if/else」,你可能需要爲整個方法的變量範圍。接下來考慮在類變量的級別(在這種情況下它可能更重要)執行該操作。'private int result = Math.Sign(true?-1:1);'。要做到這一點與if/else你需要使用一個構造函數。 – Servy
? :
是conditional operator簡寫形式的if/then /別的
第一部分是條件應該被評估爲布爾值其在?
之前的表達式after ? is then part
並且在條件爲ture時返回並且返回expression after : is else part
並返回w母雞條件被評估爲假
+1是唯一的答案(7)使用'?:'運算符的正確名稱。 – Servy
(((dni + zacetniDan)%7!= 0)? 7 - ((dni + zacetniDan)%7):0);
這是一種三元表達Condition?Expr1:Expr2
表達的結果是Expr1
結果如果Condition
爲真和Expr2
否則結果。
你的具體情況的條件是
((dni + zacetniDan) % 7 != 0)
如果這個條件爲真,則三元子表達式的結果將是
7 - ((dni + zacetniDan) % 7)
否則爲0
三元操作符。它允許您將條件值視爲單個值。
這裏有一個基本的例子的布爾轉換成字符串
string str = myBool ? "true" : "false";
這相當於
string str
if(myBool)
str = "true";
else
str = "false";
那三元運算符:http://msdn.microsoft.com/en-us/library/ty67wk28(v=vs.80).aspx
如果(dni + zacetniDan) % 7 != 0)
是true
然後評估到7 - ((dni + zacetniDan) % 7)
否則評估爲0
您可以很容易地通過分割3來理解?
和:
的一條線。
?
左側期限爲?
和:
之間的術語應該怎樣,如果條件爲真:
後,該術語應該怎樣,如果條件中使用使用的條件是假的這是一個三元運算符。
這是代碼的以下等效的速記:
int skupaj = dni + zacetniDan;
if ((dni + zacetniDan) % 7 != 0) {
skupaj += 7 - ((dni + zacetniDan) % 7);
}
else {
skupaj += 0;
}
[三元運算符(http://msdn.microsoft.com/en-us/library/ty67wk28(V = VS.80) .aspx) – birryree
[?:Operator](http://msdn.microsoft.com/en-us/library/ty67wk28.aspx) –