[英]How does ternary operator with hard coded return values work in LINQ's OrderBy?
[英]How does the ternary operator work?
請演示三元運算符如何與常規 if/else 塊配合使用。 示例:
Boolean isValueBig = value > 100 ? true : false;
完全重復: 如何使用三元運算符?
Boolean isValueBig = ( value > 100 ) ? true : false;
Boolean isValueBig;
if( value > 100 ) {
isValueBig = true;
} else {
isValueBig = false;
}
三元運算與 if/else 的區別在於,三元表達式是求值結果的語句,而 if/else 則不是。
要使用您的示例,從使用三元表達式更改為 if/else 您可以使用以下語句:
Boolean isValueBig = null;
if(value > 100)
{
isValueBig = true
}
else
{
isValueBig = false;
}
但是,在這種情況下,您的語句等效於:
Boolean isValueBig = (value > 100);
當我剛接觸 C++ 時,我發現它有助於閱讀以下構造:
Boolean isValueBig = if condition ? then x else: y;
(請注意,這不是有效代碼。這只是我訓練自己在腦海中閱讀的內容。)
Boolean isValueBig;
if (value > 100)
{
isValueBig = true;
}
else
{
isValueBig = false;
}
我從來不是三元運算符的粉絲,因為我認為它很難閱讀。 碰巧的是,Jon Skeet 和他的書, C# in Depth最終擊中了這只老狗的頭,讓它沉入其中。Jon 說,我解釋說,把它當作一個問題。
值 > 100?
“是”:“否”
現在盲人可以看見了。
希望這可以幫助您使其成為第二天性。
Boolean isValueBig;
if(value > 100) { isValueBig = true; } else { isValueBig = false; }
正如引用自?: Operator MSDN page ,“條件運算符 (?:) 根據布爾表達式的值返回兩個值之一。”
因此,您可以使用三元運算符返回的不僅僅是布爾值:
string result = (value > 100 ) ? "value is big" : "value is small";
PHP 示例
<?php
// Example usage for: Ternary Operator
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
// The above is identical to this if/else statement
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>
“表達式(表達式1)(表達式2):(表達式3)的計算結果為表達式2如果expr1的評估為真,並且如果表達式3 expr1的評估為假”。
不好的例子,因為你可以很容易地寫
Boolean isValueBig = value > 100 ? true : false;
如:
bool isValueBig = value > 100
除此之外,其他人都已經回答了。 我只是不建議使用三元運算符來設置 bool 值,因為您正在評估的已經是一個布爾值。
我意識到這只是一個例子,但值得指出。
確保不要在 Java 中的真/假部分混合類型。 它產生奇怪的結果:-(
其他人已經回答了它,但是關於三元的用法,您應該真正了解一件事,我的意思是永遠不要這樣做。
讓我們假設你有一段代碼,它應該為某個值的每個可能的變化返回一個不同的對象,為了簡單起見,我們假設一個 1 到 5 之間的整數。你的代碼如下所示:
if(i==1) {
return new ObjectOne();
} else if(i==2) {
return new ObjectTwo();
} else if(i==3) {
return new ObjectThree();
} else if(i==4) {
return new ObjectFour();
} else if(i==5) {
return new ObjectFive();
} else {
return new DefaultObject();
}
這很容易理解,但有點沉重。 由於三元只是編寫 if..else 語句的另一種方式,可以重構為
return (i==1) ? new ObjectOne() :
(i==2) ? new ObjectTwo() :
(i==3) ? new ObjectThree() :
(i==4) ? new ObjectFour() :
(i==5) ? new ObjectFive() : new DefaultObject();
它被稱為嵌套三元。 這是邪惡的,既然你知道了,請永遠不要使用它。 它的用途似乎與上面的情況類似,但很可能在現實生活中,您需要在失去可讀性的地方使用它(考慮使用可變數量的參數更改配置等)。
獎勵部門:永遠不要在 if() 中設置屬性值,看看這個: if(bool=true!=false) { .. }
引用自 MSDN(在前一篇文章中提到)
字符串結果 = (值 > 100 ) ? "價值大" : "價值小";
可以讀作:
值是否大於 100? 如果是,字符串結果是“值大”,如果不是,字符串結果是“值小”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.