我有一个ArrayList ids
包含String
ID 的对象,另一个ArrayList objs
包含具有字符串 ID 字段的对象。现在我有代码,可以找到其中ids
不匹配的代码,objs
如下所示:
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>());
我预计此 LINQ 会比foreach
+Contains
方法慢(尤其是由于Cast
调用),但 LINQ 运行速度要快得多。LINQ 方法有何不同之处可以带来性能优势?