List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;
int closest = list.Aggregate((x,y) =>
Math.Abs(x-number) < Math.Abs(y-number) ? x : y);
? x:y,那是什麼意思?? x:y,那是什麼意思?
List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;
int closest = list.Aggregate((x,y) =>
Math.Abs(x-number) < Math.Abs(y-number) ? x : y);
? x:y,那是什麼意思?? x:y,那是什麼意思?
這是一個ternary運營商。它在一行中封裝了一個if-else-return
。
三元運營商?
- 如果對?
LHS條件爲真,則返回x
- 如果條件爲假,返回y
它可以讓你指定一個條件和兩個表達式。當條件爲真時,返回第一個表達式。當它爲假時,返回第二個表達式。在這種情況下,你使用這個作爲條件:
Math.Abs(x-number) < Math.Abs(y-number)
如果這是真的,x
返回,當假的,y
。上面創建拉姆達是寫作實際上是相同的:
int closest = list.Aggregate((x,y) =>
{
if (Math.Abs(x-number) < Math.Abs(y-number))
return x;
else
return y;
});
BoolOpeartor? TrueEval:FalseEval;
這是一樣的:
if (Math.Abs(x-number) < Math.Abs(y-number))
return x;
else
return y;
它的一個ternary操作
if(Math.Abs(x-number) < Math.Abs(y-number))
true
else
false
.
或者乾脆
Math.Abs(x-number) < Math.Abs(y-number) ? x : y
有實際上比多一點吧
您所看到的稱爲三元運算符,它基本上是經典if/else語句的簡寫。三元運算符采用以下形式:
<boolean_expression> ? <value_to_use_if_true> : <value_to_use_if_false>
在你的情況下,布爾表達式是:
Math.Abs(x-number) < Math.Abs(y-number)
而且,如果這個表達式爲真,你會得到的值:
x
否則,你將得到:
y
你的代碼發佈:
List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;
int closest = list.Aggregate((x,y) => Math.Abs(x-number) < Math.Abs(y-number) ? x : y);
等同於以下內容:
List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;
int closest = list.Aggregate((x,y) =>
{
if(Math.Abs(x-number) < Math.Abs(y-number))
{
return x;
}
else
{
return y;
}
});
你正在使用被稱爲條件運算符,這是一個速記符號什麼的if-else語句,返回的結果選擇如下:{真/假條件}? {value if true}:{value if false}
三元剛表示3個部分! (類似於一元和二元)。它更準確地稱爲條件運算符。 – 2011-05-10 19:27:29
我已經說過它是'a'三元運算符,而不是''三元運算符。鏈接將他們帶到運營商。 – Aliostad 2011-05-10 19:31:25