??
コード内の記号について疑問に思っていましたC#
。それはなんのためですか?そして、どうすればそれを使用できますか?
どうint?
ですか?null許容intですか?
??
コード内の記号について疑問に思っていましたC#
。それはなんのためですか?そして、どうすればそれを使用できますか?
どうint?
ですか?null許容intですか?
null 合体演算子です。C# 2 で導入されました。
式の結果は、a ?? b
nulla
でない場合、またはb
そうでない場合です。b
必要でない限り評価されません。
2つの良い点:
式の全体的な型は、2 番目のオペランドの型です。これは、null 許容値型を使用している場合に重要です。
int? maybe = ...;
int definitely = maybe ?? 10;
(最初のオペランドとして null 非許容値型を使用できないことに注意してください。これは無意味です。)
結合規則により、これを非常に簡単に連鎖させることができます。例えば:
string address = shippingAddress ?? billingAddress ?? contactAddress;
これは、配送先住所、請求先住所、または連絡先住所から最初の null 以外の値を使用します。
これは次のショートカットです。
Text = (category == null ? "Home" : category);
カテゴリが null かどうかをチェックします。この場合、null 値は "Home" に置き換えられます。
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つの明確に識別可能な関数を実行します。
カテゴリが null の場合、テキストは「ホーム」になります