我有一个ArrayList ids包含StringID 的对象,另一个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 方法有何不同之处可以带来性能优势?