有人可以解释这行代码吗?

时间:2011-10-27 22:14:01

标签: c#

int salesTeamId = person == null ? -1 : person.SalesTeam.Id;

我可以拼凑起来:

  1. int SalesTeamId是一个变量,并且正在为该变量分配person。
  2. 之后我迷路了。任何指导?

7 个答案:

答案 0 :(得分:12)

这是一份三元声明。为了便于阅读,我把它翻译成了一个if / else块。

int salesTeamId;

if(person == null)
{
   salesTeamId = -1;
}
else
{
   salesTeamId = person.SalesTeam.Id;
}

答案 1 :(得分:8)

那是the Ternary operator。它是一个简写if语句,相当于:

int salesTeamId;
if( person == null )
{
    salesTeamId = -1;
}
else
{
    salesTeamId = person.SalesTeam.Id;
}

答案 2 :(得分:4)

这意味着,

int salesTeamId;

if (person == null) 
   salesTeamId = -1;
 else 
   salesTeamId = person.SalesTeam.Id;

答案 3 :(得分:3)

它被称为conditional operator

  

条件运算符(?:)是三元运算符(需要三个运算符)   操作数)。条件运算符的工作原理如下:

     
      
  • 第一个操作数被隐式转换为bool。它被评估和   所有副作用都在继续之前完成。
  •   
  • 如果是第一个操作数   计算结果为true(1),计算第二个操作数。
  •   
  • 如果是第一个   操作数计算结果为false(0),计算第三个操作数。
  •   

您的示例大致相当于此代码:

int salesTeamId;
if (person == null)
{
   salesTeamId = -1;
}
else
{
   salesTeamId = person.SalesTeam.Id;
}

答案 4 :(得分:2)

它是一个隐含的if语句(称为三元运算符)。

基本上它检查person是否为null,返回-1 else返回person.SalesTeam.id。然后将返回值直接分配给salesTeamId变量。

int salesTeamId;
if(person == null)
{
salesTeamId = -1;
}
else
{
salesTeamId = person.SalesTeam.Id
}

直接等效

答案 5 :(得分:2)

这相当于

int salesTeamId;
if (person == null)
    salesTeamId = -1;
else
    salesTeamId = person.SalesTeam.Id;

检查?: Operator (C#)

答案 6 :(得分:1)

如果person为null,则为salesTeamId分配-1。 如果person为null null,则为salesTeamId分配person.SalesTeam.Id。

第三级运算符是嵌入到一行中的if-then-else语句(通常!它可以分布在多行中,但这在某种程度上会失败)。

可能会清楚添加一些括号:

int salesTeamId = (person == null ? -1 : person.SalesTeam.Id);

以下伪代码也可能有所帮助:

int salesTeamId = (IF person == null THEN USE -1 ELSE USE person.SalesTeam.Id );