c#null-safe navigator - 内部实现

时间:2016-09-11 10:46:30

标签: c#

最近我听说C#null-safe导航器(?.)由于通过try - catch实现而对性能产生影响。我很难相信?.只有下面的包装,但我找不到任何关于它的证据。

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

1 个答案:

答案 0 :(得分:2)

绝对不是这样。它只是一个if-else语句。 Try it out使用Roslyn并检查编译器生成的内容

您的密码:

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;
    }
}