C# で 2 つの疑問符を組み合わせると何を意味しますか? 質問する

C# で 2 つの疑問符を組み合わせると何を意味しますか? 質問する

次のコード行に遭遇しました:

FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();

2 つの疑問符はどういう意味ですか。三項演算子のようなものですか。Google で調べるのは難しいです。

ベストアンサー1

これはヌル合体演算子であり、三項演算子(即時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(すべての回答が null の場合、 はAnswernull になります)。

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

また、上記の展開は概念的には同等ですが、各式の結果は 1 回だけ評価されることにも言及する価値があります。たとえば、式が副作用のあるメソッド呼び出しである場合、これは重要です。(これを指摘してくれた @Joey に感謝します。)

おすすめ記事