2016-09-11 14 views
0

最近、C#ヌルセーフナビゲータ(?.)がtry - catchを介して実装されているため、パフォーマンスに影響を与えていると聞いていました。 ?.は以下のようなラッパーしか信じられませんが、それについての証拠は見つかりません。c#ヌルセーフナビゲータ - 内部実装

try 
{ 
... 
} 
catch (NullReferenceException) 
{ 
return null; 
} 
+3

こと'? 'を使います。 – hvd

+0

誰かが単純なif/else構造を使ってそれを実装しない理由がわかりません。あなたは例外のアイデアのソースを持っていますか? – Timbo

+0

'。?'と暗黙のバージョンの両方を使って暗黙のバージョンを書くだけでそれを掘り下げて、ILSpyやildasmのようなものでILコードを調べることができます。 – DAXaholic

答えて

2

これは絶対に真実ではありません。これは単純にif-else文です。 Try it outロズリンを使用して、コンパイラが生成するかどうか確認

あなたのコード:

public class C 
{ 
    public void M() 
    { 
     C c = new C(); 

     int? result = c?.SomeMethod(); 

     Console.WriteLine(result); 
    } 

    public int SomeMethod() 
    { 
     return 1; 
    } 
} 

生成されたコンパイラコード:関数の生成されたコードを検査することにより、完全なナンセンスナンセンスとして自明証明可能だ

public class C 
{ 
    public void M() 
    { 
     C c = new C(); 
     int? num = c != null ? new int?(c.SomeMethod()) : null; 
     Console.WriteLine(num); 
    } 
    public int SomeMethod() 
    { 
     return 1; 
    } 
} 
関連する問題