我有一個ArrayList ids
包含String
對象是ID,另一個ArrayList objs
包含具有字符串ID字段的對象。現在我有一些代碼,找出其中ids
沒有比賽在objs
,它看起來像這樣:foreach vs LINQ找到集合之間的差異
var missing = new List<string>();
foreach (MyObj obj in objs)
{
if (!ids.Contains(obj.ID))
{
missing.Add(obj.ID);
}
}
這工作得很好。但我把它改寫了這個練習,以便更好地「認爲LINQ」:
var missing = objs.Cast<MyObj>().Select(x => x.ID).Except(ids.Cast<string>());
I expected this LINQ to be slower比foreach
+ Contains
方法(特別是由於Cast
通話),但LINQ顯著較快運行。什麼是LINQ方法的不同做法可以帶來性能方面的好處?
linq方法沒有執行,這就是爲什麼它更快。 「除外」正在使用延期執行。除此之外,它使用了一套高效的設置。 –
@TimSchmelter你是什麼意思? – jltrem
包含一個'missing.ToList()'並再次測量。 –