Linq轉換操作之ToArray,ToList,ToDictionary源碼分析


Linq轉換操作之ToArray,ToList,ToDictionary源碼分析

一:linq中的轉換運算符

1. ToArray

我們經常用在linq查詢上吧。 linq只能運用在IEnumerable這個集合類型上面。

源碼分析: 我們發現如果該類型可以轉化為ICollection,我們最后執行CopyTo方法

如果不能轉換為ICollection,那么就執行foreach。


2. ToList

這個我們發現比ToArray更簡單,如果說可以轉換為ICollection,那么它直接使用了List的構造函數,在List的構造函數中,我們看到非常

簡單。如果不能轉為就執行foreach添加。


3. ToDictionary


var list = new List<int>() { 10, 20, 30 };

var query2 = from n in list
select new { num = n };

var myarr = query2.ToDictionary(i => i.num);

從編譯器中我們應該可以看到,toDictionary之后,我們的key是一個int,value為一個匿名類型 'a

[10, 'a],[20,'a],[30,'a]


最終可以看到ToDictionary最后調用的是

foreach (TSource current in source)
{
dictionary.Add(keySelector(current), elementSelector(current));
}

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM