-1

我在stackoverflow中查看是否將null合併運算符放在訪問器方法中有任何性能影響。null訪問器方法中的空合併運算符

前:我

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

甚至不知道如果語法是正確的,但是當我調試,私營對象設置:

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

後。

在任何人問及做什麼的時候,我們在內部辯論是否爲了可讀性而寫(第一個看起來更易讀)或寫性能。

我不知道編譯器是否會優化??總是比手動空檢查更好。微優化不好,但我只是好奇

+0

我很確定這兩個產生[幾乎]相同的IL。不幸的是,我的環境並沒有給我檢查的可能性。作爲一項規則,除非性能至關重要,否則請務必閱讀。 – Leri

+0

基於純粹意見的問題 - 挑選更喜歡的版本。如果您認爲有任何性能影響 - 衡量或看看IL。 (我預計幾乎爲零的差異......但不會對任何結果下注...一個額外的任務不太可能會造成任何可衡量的影響) –

回答

2

實際上,你可以寫爲:

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

至於性能也越高,實際上是同樣的事情,如果使用,所以沒有什麼區別。

+0

您的語法絕對看起來整潔和簡潔 –

+0

@LeeGary這比您的一行更好,但是。 ..你真的想要嗎?如果非C#開發人員將使用您的代碼呢?我曾經使用特定語言的東西,但是當我離開第一份工作時,在第一個月中,我每天花費1-2小時來解釋這個或那個操作員對該公司的新開發人員做了什麼。從那時起,我只有在他們真的給我一些重要的東西時才使用這些功能。然而,這可能導致公開討論。 – Leri

+0

@Leri嗯,我不同意不使用語言特定的東西,我更傾向於利用語言提供的東西。就像關於在.net中使用var的爭論一樣,它讓人覺得它使代碼看起來非常javascripty,但它實際上提高了生產力。 –

相關問題