? x : y 的意思是什么?

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, what is the meaning of that?

10个回答

11

这相当于

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

查看MSDN文档(旧版/新版),以获取更多详细信息和示例。


7

这是一个三元运算符。它将if-else-return封装在一行中。


1
三元运算符只是指三个部分!(类似于一元和二元)。更准确地说,它被称为条件运算符。 - John Gibb
6
我已经说过它是“一个”三元运算符,而不是“那个”三元运算符。链接会带他们到这个运算符。 - Aliostad

5

这是 C# 条件运算符

它允许您指定一个条件和两个表达式。当条件为真时,返回第一个表达式。当条件为假时,返回第二个表达式。在这种情况下,您将其用作条件:

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

当条件成立时,返回x,否则返回y。上面创建的lambda表达式实际上等同于以下代码:

int closest = list.Aggregate((x,y) => 
    {
        if (Math.Abs(x-number) < Math.Abs(y-number))
            return x;
        else
            return y;
    });

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

2

a ? b : c是一个三元运算符,它的翻译是:

if(a)
    b;
else
    c;

然而,bc不是语句,而是表达式。 - Pindatjuh

1
三元运算符? - 如果?左侧的条件为真,则返回x,如果条件为假,则返回y

1

1

这与以下内容相同:

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

0

这是一个三元运算符

if(Math.Abs(x-number) < Math.Abs(y-number))
  true
else
  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 语句的简写形式,其中返回的结果如下所示:{true/false condition} ? {value if true} : {value if false}。这里的 true/false 条件为真时返回 value if true,否则返回 value if false。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接