LINQ 擴充方法的順序
問題來源: LINQ 擴充方法的順序不會影響效能?
問題:
為什麼 LINQ 擴展方法的順序不會顯著影響效能?例如,比較以下兩個語句,人們可能會認為 Where
後面接著 FirstOrDefault
比 FirstOrDefault
後面跟著 Where
慢:
<code class="language-csharp">hugeList.Where(x => x.Text.Contains("10000")).FirstOrDefault(); hugeList.FirstOrDefault(x => x.Text.Contains("10000"));</code>
解答:
認為 Where
後面跟著 FirstOrDefault
會更慢的假設是錯誤的。 Where
不需要在取得第一個符合項之前找到所有符合項目。它按需檢索匹配項,這意味著如果只需要第一個匹配項,它會在找到第一個匹配項後停止。
為了說明這一點,想像以下場景:
有三個人參與:
- A 持有一副洗好的牌。
- B 穿著一件寫著「如果牌是紅色的」的襯衫。
- C 對 B 說:「給我第一張牌。」
B 會重複向 A 要求牌,直到 A 提供一張紅牌。一旦獲得第一張紅牌,它就會交給 C,過程結束。 B 找到第一張紅牌後不需要繼續向 A 要求牌。
同樣,在 LINQ 語句中,Where
就像 B,過濾牌(列表中的項)以找到第一個匹配項。它不需要在返回第一個匹配項之前找到所有匹配項。
另一方面,如果擴充方法的順序顛倒,FirstOrDefault
後面跟著 Where
,情況就不同了。 FirstOrDefault
需要檢索第一個項,然後 Where
需要應用其過濾器,這將涉及遍歷所有項。這將比 Where
後跟 FirstOrDefault
效率低。
因此,在決定 LINQ 擴展方法的效能影響時,請務必考慮應用它們的順序,因為它會根據所使用的特定方法影響操作的效率。
以上是LINQ 擴充方法的順序(例如,Where 和 FirstOrDefault)是否會影響效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!