我很好奇在明年情況下,編譯效率:C#空合併運算符(?)編譯器代碼優化
double total = list.Sum(x => x.Value) ?? 0;
問:編譯器會產生代碼,將一次或兩次執行Sum函數?
它可以產生類似:
double total = list.Sum(x => x.Value) == null ? 0 : (double)list.Sum(x => x.Value);
或
double temp = list.Sum(x => x.Value);
total = temp == null ? 0 : (double)temp;
+1 - '如果源不包含任何元素,則此方法返回零。「並且 '結果不包含null值':from:http://msdn.microsoft.com/en-us/library/bb383052.aspx – Habib 2013-03-18 11:36:35
@Habib我讀過的msdn文檔對我來說有點不清楚。如果源只包含null,會發生什麼?是由源代碼隱含的元素沒有空元素?他們可以輕易地說:返回結果永遠不會爲空,這將更清晰。方法返回int的事實? (IEnumerable)導致我錯誤地認爲它可以返回null類型。 –
Goran
2013-03-18 12:12:43
@Goran:同意。保持返回類型爲空可能是愚蠢的。 – spender 2013-03-18 12:14:35