34

??コード内の記号について疑問に思っていましたC#。それはなんのためですか?そして、どうすればそれを使用できますか?

どうint?ですか?null許容intですか?

以下も参照してください。

?? Null 合体演算子 —> 合体 とはどういう意味ですか?

4

12 に答える 12

52

null 合体演算子です。C# 2 で導入されました。

式の結果は、a ?? bnullaでない場合、またはbそうでない場合です。b必要でない限り評価されません。

2つの良い点:

  • 式の全体的な型は、2 番目のオペランドの型です。これは、null 許容値型を使用している場合に重要です。

    int? maybe = ...;
    int definitely = maybe ?? 10;
    

    (最初のオペランドとして null 非許容値型を使用できないことに注意してください。これは無意味です。)

  • 結合規則により、これを非常に簡単に連鎖させることができます。例えば:

    string address = shippingAddress ?? billingAddress ?? contactAddress;
    

これは、配送先住所、請求先住所、または連絡先住所から最初の null 以外の値を使用します。

于 2009-11-19T08:14:05.187 に答える
8

これは次のショートカットです。

Text = (category == null ? "Home" : category);
于 2009-11-19T08:13:44.093 に答える
5

カテゴリが null かどうかをチェックします。この場合、null 値は "Home" に置き換えられます。

于 2009-11-19T08:09:29.110 に答える
4

null合体演算子の私のお気に入りの使用法の1つは、コード内のifステートメントを回避することです(ステートメントが醜く、ほとんどの場合、混乱していると思います)。たとえば、利用可能な場合はキャッシュから何かをロードすることを選択する可能性がある典型的なシナリオを考えてみましょう。そうでない場合は、データベースからロードしてキャッシュにデータを入力します。

private SomeData GetData() {
    var data = HttpRuntime.Cache.Get("key") as SomeData;

    if (data == null) {
        data = DAL.GetData(some parameters...);
        HttpRuntime.Cache.Add("key", data, ....);
    }

    return data;
}

私にとって、それは醜いコードです。私は少し肛門かもしれませんが、代わりにこれにリファクタリングしてみませんか?

private SomeData GetDataAndCache() {
    var data = DAL.GetData(some parameters...);
    HttpRuntime.Cache.Add("key", data, ....);
    return data;
}

private SomeData GetData() {
    var data = HttpRuntime.Cache.Get("key") as SomeData;
    return data ?? GetDataAndCache();
}

これはSRPに厳密に従い、よりクリーンで読みやすいIMOです。関数は、それぞれ1つの明確に識別可能な関数を実行します。

于 2009-05-06T00:25:55.437 に答える
4

カテゴリが null の場合、テキストは「ホーム」になります

于 2009-11-19T08:09:18.627 に答える