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));
}