當我讀取使用Select
的代碼時,我認爲「select-all-where」。 當我讀取使用Map
的代碼時,我認爲「這個對那個」或者「應用於所有人」。 我不能是唯一認爲名稱Select
令人困惑的人。爲什麼命名爲Select的LINQ「apply-to-all」方法?
回答
這真的等同於函數式語言映射。它被命名爲Select
的原因是它被設計爲用作類似SQL的關鍵字的LINQ的一部分。
from item in collection
where item.Value == someValue
select item.Name
被翻譯成:
collection.Where(item => item.Value == someValue)
.Select(item => item.Name)
這將是一個有點矛盾,如果Select
被評爲Map
;例如:
collection.Filter(item => item.Value == someValue)
.Map(item => item.Name)
事實上,很多人都沒有聽說過函數式編程就使用LINQ。對他們來說,LINQ是一種檢索數據對象並輕鬆查詢它們的方法(就像SQL查詢一樣)。對他們來說,Select
和Where
非常合理。比Map
和Filter
多得多。
選擇最後一個主要原因之一是使智能感知工作。通過首先將序列的來源(來自語句),Intellisense可以正常工作。
這與問題有什麼關係? – nawfal 2013-03-30 09:14:14
起初Select
對我來說似乎也沒什麼困惑,但這只是時間問題。 Mehrdad告訴你Select
的一個很好的理由。除此之外,我覺得Select
更好地傳達了Linq
的不變性方面。不是Map
將意味着它正在改變原始結構,但Select
說明它更清晰。它告訴你沒有觸摸原始列表,而只是從它中選擇來形成另一個列表。
它與其他命名以及Where
一樣。當您致電collection.Filter
時,它會告訴您一個想法,即您正在篩選特定收藏集,或者至少第一次。最後,這都是一個熟悉的問題。儘管一開始我對Linq
的命名感到非常惱火,但現在我覺得MS團隊已經把它變得最正確了。
+1表示「'Select」更清晰「。一個人不得不考慮SQL語法。 – nrodic 2014-05-29 23:06:14
- 1. 該方法命名爲什麼?
- 2. 爲什麼java.lang.Thread.join()方法的命名方式如此?
- 3. 爲什麼沒有爲命名指針類型定義方法?
- 4. 爲什麼命名C++ STL集合的容器的count()方法?
- 5. 的LINQ to SQL SELECT命令爲
- 6. 爲什麼Microsoft.Phone.Reactive命名空間中的方法Observable.While和Observable.Prune?
- 7. 爲什麼錯誤 「System.String不包含命名方法 '的appendChild'」
- 8. 爲什麼命名查詢?
- 9. 爲什麼命名不同?
- 10. Moq爲什麼不能在.Select方法中調用此方法?
- 11. 回調方法 - 爲什麼稱爲回調方法的生命週期方法?
- 12. 爲什麼Node.js命名爲Node.js?
- 13. 爲什麼文件被命名爲catalina.out?
- 14. 爲什麼不將Array.prototype.some命名爲.any?
- 15. 爲什麼case class被命名爲'case'?
- 16. 爲什麼subprocess.Popen類未命名爲Subprocess?
- 17. 爲什麼getProperties方法在Ember命名空間中不存在?
- 18. 爲什麼我們必須命名接口方法參數?
- 19. 有什麼方法可以爲角2路線命名?
- 20. 爲什麼CRTP實現和接口方法命名不同?
- 21. 爲什麼方法名以0結尾?
- 22. 哪種方法簽名好,爲什麼?
- 23. LINQ查詢解析 - 爲什麼需要System.Linq命名空間?
- 24. 爲什麼log4j重命名文件名?
- 25. 命名參數是方法簽名的一部分嗎?如何和爲什麼?
- 26. 命名方法和命名函數的定義是什麼?
- 27. 爲什麼我們給GridView的方法名稱Onsorting方法
- 28. 哪個是最有效的SELECT方法,爲什麼?
- 29. 在$ .ajax()中,爲什麼名爲'type'的請求方法選項?
- 30. 爲什麼eclipse需要一個名爲'main'的實際方法?
完整意義。如果我真的關心那麼多,我可以用擴展方法來包裝Where和Select。 – ChaosPandion 2010-01-22 00:57:25
很好的答案。我實際上在沒有LINQ的情況下使用了「Select」,但它作爲LINQ表達式更清晰。 – willem 2010-07-23 08:06:58
謝謝,很好的答案。從上下文來看,它沒有任何意義,但這有助於解釋它。 – nsantorello 2011-08-31 15:44:19