0
最近、C#ヌルセーフナビゲータ(?.
)がtry - catch
を介して実装されているため、パフォーマンスに影響を与えていると聞いていました。 ?.
は以下のようなラッパーしか信じられませんが、それについての証拠は見つかりません。c#ヌルセーフナビゲータ - 内部実装
try
{
...
}
catch (NullReferenceException)
{
return null;
}
最近、C#ヌルセーフナビゲータ(?.
)がtry - catch
を介して実装されているため、パフォーマンスに影響を与えていると聞いていました。 ?.
は以下のようなラッパーしか信じられませんが、それについての証拠は見つかりません。c#ヌルセーフナビゲータ - 内部実装
try
{
...
}
catch (NullReferenceException)
{
return null;
}
これは絶対に真実ではありません。これは単純に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;
}
}
こと'? 'を使います。 – hvd
誰かが単純なif/else構造を使ってそれを実装しない理由がわかりません。あなたは例外のアイデアのソースを持っていますか? – Timbo
'。?'と暗黙のバージョンの両方を使って暗黙のバージョンを書くだけでそれを掘り下げて、ILSpyやildasmのようなものでILコードを調べることができます。 – DAXaholic