使用 foreach 循环和 LINQ
的 ForEach
方法,是否有性能或其他方面的区别?
为了背景,这是我的方法的一部分:
foreach (var property in typeof(Person).GetProperties())
{
Validate(property.Name);
}
我可以使用以下代码来执行相同的任务:
typeof(Person)
.GetProperties()
.ToList()
.ForEach(property => Validate(property.Name));
使用循环结构比使用方法链更好的情况是什么?
下面是另一个例子,我在这里使用了 ForEach
方法,但同样可以使用 foreach 循环和变量:
// LINQ
PrivateData.Database.Users
.Cast<User>()
.Where(user => user.LoginType == LoginType.WindowsUser)
.Select(user => new { Name = user.Name, Login = user.Login })
.ToList()
.ForEach(result => WriteObject(result));
// Loop
var users = PrivateData.Database.Users
.Cast<User>()
.Where(user => user.LoginType == LoginType.WindowsUser)
.Select(user => new { Name = user.Name, Login = user.Login });
foreach(var user in users)
{
WriteObject(user);
}
ForEach
之前调用ToList
- 像这样迭代并执行操作并不是真正的“LINQy”方式。 - James ThorpeForEach
方法。正确的LINQ做法是使用一个foreach
循环。 - ServyToList
,如果结果有数十亿条记录,在foreach
执行之前就会消耗完内存。相反,在原始查询上使用foreach
将一次加载每个记录。 - Cameron MacFarland