好的我会自己回答。
Xaisoft,Linq
查询,不管是lambda表达式还是查询表达式,都不应该用于突变列表。因此,您的Select
drivers = drivers.Select(d => { d.id = 0; d.updated = DateTime.Now; return d; }).ToList();
是不好的风格。它混淆/不可读,不是标准,也不符合Linq
理念。实现最终结果的另一个差的风格是:
drivers.Any(d => { d.id = 0; d.updated = DateTime.Now; return false; });
但是,这并不是说ForEach
上List<T>
是不合适的。它在像你这样的案例中找到用途,但不要将突变与Linq
查询混合使用,即所有。我更喜欢写这样的:
drivers.ForEach(d => d.updated = DateTime.Now);
它的优雅和可以理解。由于它不涉及Linq
,它也不会造成混淆。我不喜欢lambda内多个语句的语法(如你的情况)。当情况变得复杂时,它的可读性和可读性都会降低一些。在你的情况下,我更喜欢直接foreach
循环。
foreach (var d in drivers)
{
d.id = 0;
d.updated = DateTime.Now;
}
个人而言,我喜欢ForEach
上IEnumerable<T>
as a terminating call to Linq
expression(即,如果转让并不意味着是一个查询,但执行)。
[Linq副作用](http:// stackoverflow。com/questions/5632222/linq-side-effects) – nawfal