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