3

誰か次のコードを説明してreturn total ?? decimal.Zeroくれませんか?

public decimal GetTotal()
{
    // Part Price * Count of parts sum all totals to get basket total
    decimal? total = (from basketItems in db.Baskets
                      where basketItems.BasketId == ShoppingBasketId
                      select (int?)basketItems.Qty * basketItems.Part.Price).Sum();
    return total ?? decimal.Zero;
}

以下の意味でしょうか?

    if (total !=null) return total;
    else return 0;
4

5 に答える 5

13

はい、そういう意味です。これはnull 合体演算子と呼ばれます。

これは単なる構文のショートカットです。ただし、読み取られる値は 1 回しか評価されないため、より効率的です。(値を 2 回評価すると副作用が生じる場合、機能的な違いが生じる可能性があることに注意してください。)

于 2012-04-23T20:43:40.207 に答える
6

??C# では、null 合体演算子 と呼ばれます。次のコードとほぼ同等です

if (total != null) {
  return total.Value;
} else {
  return Decimal.Zero;
}

if上記のステートメント展開と演算子の主な違いの 1 つ??は、副作用の処理方法です。例では??、値を取得する副作用はtotal1 回だけ発生しますが、ifステートメントでは 2 回発生します。

この場合total、ローカルであるため問題ではなく、副作用はありません。しかし、これが副作用のプロパティまたはメソッド呼び出しであると言う場合、これは要因になる可能性があります。

// Here SomeOperation happens twice in the non-null case 
if (SomeOperation() != null) {
  return SomeOperation().Value;
} else { 
  return Decimal.Zero;
}

// vs. this where SomeOperation only happens once
return SomeOperation() ?? Decimal.Zero;
于 2012-04-23T20:47:32.710 に答える
4

null 合体演算子です。

事実上、コードを次のように書き直すようなものです。

 return (total != null) ? total.Value : decimal.Zero;
于 2012-04-23T20:44:03.253 に答える
2

あなたはそれを釘付けにしました。これは null 合体演算子と呼ばれます。ここでチェックしてください

于 2012-04-23T20:45:48.090 に答える
1

null 以外の最初の式を返します (最初の式はtotalで、2 番目の式は ですdecimal.Zero) 。

したがって、totalnull の場合はdecimal.Zero返されます。

于 2012-04-23T20:43:47.457 に答える