“ ??”とは演算子? [複製]
-
05-07-2019 - |
質問
この質問にはすでに回答があります:
- C#で2つの疑問符が一緒に意味するもの 17の答え
C#
コードでの ??
サインインについて疑問に思っていました。それは何のため?そして、どうすればそれを使用できますか?
int?
はどうですか? nullable intですか?
参照:
解決
「null合体演算子」と呼ばれます。次のように動作します:
実行する代わりに:
int? number = null;
int result = number == null ? 0 : number;
次のことができるようになりました:
int result = number ?? 0;
他のヒント
null合体演算子 。 C#2で導入されました。
式の結果 a ?? b
は、nullでない場合は a
、そうでない場合は b
です。 b
は、必要でない限り評価されません。
2つの素晴らしいこと:
-
式の全体的な型は、第2オペランドの型です。これは、null許容値型を使用している場合に重要です。
int? maybe = ...; int definitely = maybe ?? 10;
(null不可の値型を第1オペランドとして使用できないことに注意してください。 無意味。)
-
結合規則により、これを本当に簡単に連鎖させることができます。例:
string address = shippingAddress ?? billingAddress ?? contactAddress;
これは、配送先住所、請求先住所、連絡先住所のうち最初のnull以外の値を使用します。
それは合体演算子です。基本的に、次の略記です
x ?? new Student();
x != null ? x : new Student();
オペレーターのMSDNドキュメント
これは新しいNull Coalesce演算子です。
??演算子は、nullでない場合は左側のオペランドを返し、そうでない場合は右側のオペランドを返します。
ここで読むことができます: http://msdn.microsoft.com/en-us/ library / ms173224(VS.80).aspx
次のショートカットです:
Text = (category == null ? "Home" : category);
これは合体演算子です。最初の値がnullの場合、別の値を返します
string value1 = null;
string value2 = "other";
string value3 = value1 ?? value2; // assigns "other" to value 3
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の場合、テキストは「ホーム」になります
最初の非ヌル値を返します。便利。
それが null-coalescing演算子です。 nullableタイプ(他のものと併用) 、申し訳ありません:)