访问器方法中的null合并运算符

时间:2013-10-23 06:58:13

标签: c# performance accessor readability null-coalescing-operator

我在stackoverflow中查看是否在访问器方法中放置空合并运算符会产生任何性能影响。

在:

private Uri _Url;
public Uri Url
{
    if(_Url == null)
        _Url = new Uri(Utilities.GenerateUri());
    return _Url;
}

后:

private Uri _Url;
public Uri Url 
{
    get 
    {
        return _Url = _Url ?? new Uri(Utilities.GenerateUri());
    }
}

我甚至不确定语法是否正确,但是当我调试时,私有对象已设置。

在有人问起这样做有什么意义之前,我们在内部辩论是否为了可读性而编写(第一个看起来对我来说更具可读性),或者为了性能而写作。

我不知道编译器是否会优化?总是比手动空检查更好。微优化很糟糕,但我只是好奇

1 个答案:

答案 0 :(得分:2)

您实际上可以将其写为:

return _Url ?? (_Url = new Uri(Utilities.GenerateUri()));

就性能而言,它实际上与使用if相同,所以没有区别。