2014-04-15 60 views
0

在檢查對象不爲空之後,從對象獲取屬性的最快方法(就最小化代碼語句量而言)是什麼?檢查對象不爲空後從對象獲取屬性的最快方法是什麼?

string s = null; 

if (null != myObject) 
{ 
    s = myObject.propertyName; 
} 
+2

使用三元運算符? var s = myObject == null? null:myObject.PropertyName 目前尚不清楚「最快」下的含義。 – Oleg

+0

(開始名稱上的戰爭:「三元」vs「條件」操作符......) –

+0

你的意思是最簡單的,因爲這不會是你代碼中最慢的部分,你應該需要擔心這裏的性能。 –

回答

1

C#沒有空傳播運算符(儘管已經討論了幾次)。坦率地說,「快」是不可能在這裏是一個因素,因爲它通常會在同一個(或非常相似),IL結束了,但我傾向於使用:

string s = myObject == null ? null : myObject.PropertyName; 
+0

我會把條件放入大括號中,因爲這會導致混淆:'string s =(myObject == null)? null:myObject.PropertyName;' –

+2

@JohannesWanzek我不會感到困惑,編譯器也不會混淆。如果你更喜歡括號,儘量使用它們。 –

+0

將條件放入括號中是一種常見模式,因此開發人員可直接確定此表達式的含義。但好的,這是我的意見。 –

2

參考:爲等待future C# 6.0 feature爲null,與可能?.語法檢查:

string result = obj?.ToString(); 

現在:使用ternary operator

string result = obj != null ? obj.ToString() : null; 
+1

目前,這仍然是一種*可能的*新語法。例如,它不在目前可用的roslyn版本中。 (\ *咳嗽\ *有條件的操作員\ *咳嗽\ *) –

0

您描述的情況只是操作員有用的一種情況。這也是方便替換結構是這樣的:

if (value != null) 
     { 
      return value; 
     } 
     else 
     { 
      return otherValue; 
     } 

或者

return value != null ? value : otherValue; 

return value ?? otherValue; 
相關問題