誰かがこのコード行を解釈できますか?

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

私が一緒に作ることができるものから:

  1. int SalesTeamIdは変数で、personが変数に割り当てられています。

その後、私は失われています。どんな指導?

6

7 答え

これは3つのステートメントです。私は可読性のためにそれをif/elseブロックに翻訳しました。

int salesTeamId;

if(person == null)
{
   salesTeamId = -1;
}
else
{
   salesTeamId = person.SalesTeam.Id;
}
12
追加された
@Dylan:逃した.SalesTeamリファレンスを指摘していただきありがとうございます
追加された 著者 Akron,

これは三項演算子です。 if 文は、次のものと同等の略語です。

int salesTeamId;
if( person == null )
{
    salesTeamId = -1;
}
else
{
    salesTeamId = person.SalesTeam.Id;
}
8
追加された

その意味は、

int salesTeamId;

if (person == null) 
   salesTeamId = -1;
 else 
   salesTeamId = person.SalesTeam.Id;
4
追加された

これは、 条件演算子 と呼ばれています。

条件演算子(?:)は三項演算子です(3つ   オペランド)。条件付き演算子は次のように動作します:

     
      
  • 最初のオペランドが暗黙的にboolに変換されます。それは評価され、   すべての副作用が完了してから続行します。
  •   
  • 最初のオペランド   true(1)と評価され、2番目のオペランドが評価されます。
  •   
  • 最初の   オペランドが偽(0)と評価された場合、3番目のオペランドが評価されます。
  •   

あなたの例は、このコードとほぼ同じです:

int salesTeamId;
if (person == null)
{
   salesTeamId = -1;
}
else
{
   salesTeamId = person.SalesTeam.Id;
}
3
追加された

その暗黙のif文(三項演算子と呼ばれます)。

基本的に、personがnullの場合は-1を返し、それ以外の場合はperson.SalesTeam.idを返します。戻り値は、salesTeamId変数に直接割り当てられます。

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

直接的に同等です

2
追加された

これは

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

Check ?: Operator (C#)

2
追加された

personがnullの場合、salesTeamIdには-1が割り当てられます。 personがnullの場合、salesTeamIdにはperson.SalesTeam.Idが割り当てられます。

3次演算子はif-then-else文で1行に埋め込まれています(通常は複数の行にまたがっていますが、それは幾分ポイントを破ります)。

それは、括弧を追加するためのものをクリアするかもしれません:

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

次の擬似コードはまた役立ちます:

int salesTeamId = (IF person == null THEN USE -1 ELSE USE person.SalesTeam.Id );
1
追加された