2016-06-01 13 views
-5

私はこのルーチンを持っている:なぜNull Coalesce演算子はnullを返すのですか?

try 
    { 
     CurrentSessionName = SelectedSession?.Name ?? "No Session Selected"; 
     CurrentSessionTolerance = SelectedSession?.Tolerance.ToString() ?? "N/A"; 
     CurrentSessionVerification = SelectedSession?.Verification.Description ?? "N/A"; 
    } 
    catch (Exception ex) 
    { 
     var whatever = ex.GetType(); // hits here with no provided information 
     Console.WriteLine("Null Reference Exception"); // ignores this 
     string name = SelectedSession?.Name; // and this 
    } 

、なぜそれはまだSelectedSessionがNullでない場合であってもNullReferenceExceptionエラーをスローしますか?

+1

ToString()を呼び出そうと、その後のですか?また、 'SelectedSession.Tolerance'と' SelectedSession.Verification'はnullでもかまいません。 –

+0

よく 'SelectedSession'はあなたがそれからのヌル伝道を使っているので、投げません。 'SelectedSession.Tolerance'や' SelectedSession.Verification'はどうでしょうか? – Jonesopolis

+0

完全なエラー+スタックトレースを投稿してください。 – sstan

答えて

3

ToleranceまたはVerificationにnullを設定し、ヌルポインタでToString()関数を呼び出すことができます。

nullポインタでToString()を呼び出すことはできません。

+1

それで私のコンパイラがなぜそれを打たなかったのですか? –

5

ヌル伝播演算子は素晴らしいですが、魔法のようにヌルを取り除くわけではありません。

このスニペット

SelectedSession?.Tolerance 

ウィルないエラーSelectedSessionがnullであるが、上記の結果がnullになるように、それは上に伝播するかどうか。 SelectedSessionではなく、ではない場合も同じですが、Tolerenceはnullです。

問題は、あなたがリリースモードでデバッグしようとしていますヌル

SelectedSession?.Tolerance.ToString() 
関連する問題