1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み】C#でクエスチョンマークを2つ並べるとどんな意味になるのか?

2022-01-11 21:24:40

質問

C#のコードは次のとおりです。

FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();

クエスチョンマークを2つ並べるとどうなる?

解決方法は?

null合体演算子で、三項(immediate-if)演算子とよく似ています。以下もご参照ください。 ?? 演算子 - MSDN .

FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();

に展開されます。

FormsAuth = formsAuth != null ? formsAuth : new FormsAuthenticationWrapper();

というように、さらに展開されます。

if(formsAuth != null)
    FormsAuth = formsAuth;
else
    FormsAuth = new FormsAuthenticationWrapper();

英語では、"もし左側にあるものがNULLでなければそれを使い、そうでなければ右側にあるものを使え、という意味です。

なお、これらはいくつでも順番に使用することができます。次の文は、最初の非NULLを代入します。 Answer#Answer (すべてのAnswerがNULLの場合 Answer はnull)。

string Answer = Answer1 ?? Answer2 ?? Answer3 ?? Answer4;


また、上記の展開は概念的には同じですが、各式の結果は一度しか評価されないということも述べておきます。これは、例えば式が副作用のあるメソッド呼び出しである場合、重要なことです。(この点を指摘してくれた@Joeyに感謝します)。