3
var discount = (i == 1) ? definition.SecondPetDiscount ?? definition.AdditionalPetDiscount :
               (i == 2) ? definition.ThirdPetDiscount ?? definition.AdditionalPetDiscount :
               definition.AdditionalPetDiscount;

このコード スニペットの説明を教えてください。三項演算子については知っています。しかし、上記はそうではありません。

通常の三項演算子は次のようになります。

PaidDate = ( paidDate == null ? DateTime.Now : paidDate);
4

6 に答える 6

6

?:三項演算子です。??null 合体演算子です。null ではない最初の式を返すために使用されます。

投稿したスニペットは、両方の演算子を利用しています。if/elseこれは、次の構成と同等です。

if (i == 1)
{
    if (definition.SecondPetDiscount != null)
    {
        discount = definition.SecondPetDiscount;
    }
    else
    {
        discount = definition.AdditionalPetDiscount;
    }
}
else if (i == 2)
{
    if (definition.ThirdPetDiscount != null)
    {
        discount = definition.ThirdPetDiscount;
    }
    else
    {
        discount = definition.AdditionalPetDiscount;
    }
}
else
{
    discount = definition.AdditionalPetDiscount;
}

そのスニペットでは、複数の三項演算を連鎖させています。また、複数の null 合体操作を連鎖させると便利な場合もありますvar foo = a ?? b ?? c

于 2013-04-01T18:42:41.267 に答える
4

これは、C# の null 合体演算子です。左辺が null でない場合は左辺を返し、それ以外の場合は右辺を返すショートカットです。

于 2013-04-01T18:38:44.047 に答える
4

これはミックスです。

このステートメントには、2 つの条件付き (三項) 操作と、null 合体演算子があります。

最初の 3 項演算の 2 番目の「オプション」は、3 項演算そのものです。

于 2013-04-01T18:39:54.800 に答える
2

null合体演算子、または??

definition.ThirdPetDiscount ?? definition.AdditionalPetDiscount

definition.ThirdPetDiscountnullの場合、使用するよりもdefinition.AdditionalPetDiscount

その周りの三項演算子は、通常の三項演算子のように動作します。null合体演算子はその中にネストされているだけで、2番目の三項演算子にネストされた1つの三項演算子もあります

于 2013-04-01T18:39:40.117 に答える