2011-05-10 40 views
3
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,那是什麼意思?

回答

9

它的

if Math.Abs(x-number) < Math.Abs(y-number) then use x else use y 

等效見MSDN documentation的更多細節和例子

7

這是一個ternary運營商。它在一行中封裝了一個if-else-return

+0

三元剛表示3個部分! (類似於一元和二元)。它更準確地稱爲條件運算符。 – 2011-05-10 19:27:29

+4

我已經說過它是'a'三元運算符,而不是''三元運算符。鏈接將他們帶到運營商。 – Aliostad 2011-05-10 19:31:25

1

三元運營商? - 如果對? LHS條件爲真,則返回x - 如果條件爲假,返回y

5

這是C# conditional operator

它可以讓你指定一個條件和兩個表達式。當條件爲真時,返回第一個表達式。當它爲假時,返回第二個表達式。在這種情況下,你使用這個作爲條件:

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; 
    }); 
2

a ? b : c是一個三元運算符,將它轉換爲:

if(a) 
    b; 
else 
    c; 
+0

然而'b'和'c'不是語句,而是表達式。 – Pindatjuh 2011-05-11 16:26:09

1

這是一樣的:

if (Math.Abs(x-number) < Math.Abs(y-number)) 
    return x; 
else 
    return y; 
0

它的一個ternary操作

if(Math.Abs(x-number) < Math.Abs(y-number)) 
    true 
else 
    false 

     . 

或者乾脆

Math.Abs(x-number) < Math.Abs(y-number) ? x : y 
3

有實際上比多一點吧

您所看到的稱爲三元運算符,它基本上是經典if/else語句的簡寫。三元運算符采用以下形式:

<boolean_expression> ? <value_to_use_if_true> : <value_to_use_if_false> 

在你的情況下,布爾表達式是:

Math.Abs(x-number) < Math.Abs(y-number) 

而且,如果這個表達式爲真,你會得到的值:

x 

否則,你將得到:

y 
0

你的代碼發佈:

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}