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,那是什么意思?
答案 0 :(得分:9)
相当于
if Math.Abs(x-number) < Math.Abs(y-number) then use x else use y
有关更多详细信息和示例,请参阅MSDN文档(old version / new version)
答案 1 :(得分:7)
这是ternary运营商。它将if-else-return
封装在一行中。
答案 2 :(得分:5)
它允许您指定条件和两个表达式。条件为true时,返回第一个表达式。如果为false,则返回第二个表达式。在这种情况下,您使用此作为条件:
Math.Abs(x-number) < Math.Abs(y-number)
如果是这样,则返回x
,如果为false,则返回y
。上面创建的lambda实际上与写作相同:
int closest = list.Aggregate((x,y) =>
{
if (Math.Abs(x-number) < Math.Abs(y-number))
return x;
else
return y;
});
答案 3 :(得分:3)
实际上它比? x : y
你看到的是一个三元运算符,基本上是经典if / else语句的简写。三元运算符采用以下形式:
<boolean_expression> ? <value_to_use_if_true> : <value_to_use_if_false>
在您的情况下,布尔表达式为:
Math.Abs(x-number) < Math.Abs(y-number)
并且,如果此表达式被评估为true,您将获得值:
x
否则你会得到:
y
答案 4 :(得分:2)
a ? b : c
是三元运算符,它转换为:
if(a)
b;
else
c;
答案 5 :(得分:1)
三元运算符?
- 如果?
的LHS条件为真,则返回x
- 如果条件为false,则返回y
答案 6 :(得分:1)
BoolOpeartor? TrueEval:FalseEval;
答案 7 :(得分:1)
它与:
相同if (Math.Abs(x-number) < Math.Abs(y-number))
return x;
else
return y;
答案 8 :(得分:0)
是ternary运营商
if(Math.Abs(x-number) < Math.Abs(y-number))
true
else
false
.
或者只是
Math.Abs(x-number) < Math.Abs(y-number) ? x : y
答案 9 :(得分: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语句的简写表示法,其中返回的结果选择如下: {true / false condition}? {value if true}:{value if false}