简单的 C# for each to LINQ 问题
本文关键字:to LINQ 问题 each for 简单 | 更新日期: 2023-09-27 17:56:55
目前有这个:
foreach (var series in Chart1.Series)
{
series.Enabled = false;
}
我想用一个简单的一行表达来表达这一点。我认为这会起作用:
Chart1.Series.Select( series => series.Enabled = false);
但是,这没有任何效果。大概是因为我只是误解了 Select 的工作原理,这很好。
我的下一个想法是做一些类似 Chart1.Series.ForEach( series => series。启用 = false),但 Chart1.Series 不实现 IEnumberable (..或者至少 ForEach 不是一个可接受的调用方法)。
我宁愿不做Chart1.Series = Chart1.Series.ToList().ForEach( series => series.Enabled = false);
,但也许这是最简单的选择?
对于您要执行的操作,首选foreach
。 您正在循环访问一系列元素并修改这些元素。 这就是foreach
的目的。
Linq 用于获取一个元素序列,并根据某些条件/转换生成新序列。 不是你所追求的。
简单,一行:)
foreach (var series in Chart1.Series) { series.Enabled = false; }
你的第一个foreach循环非常清晰并且有效,所以为什么需要用LINQ替换它,它不会更清晰或更快。
否则我认为它不会比你上面说的更简单
Chart1.Series.ToList().ForEach( series => series.Enabled = false);
至于 Select
不起作用的具体原因,请记住 Select 返回一个 IEnumerable<T>
,这是一个知道如何枚举的对象。 换句话说,您有一个对可以枚举但尚未枚举的内容的引用。 所以如果你拿这个:
var series = Chart1.Series.Select( s => s.Enabled = false);
foreach (var s in series) {}
你将获得预期的效果,因为现在你正在枚举序列,因此调用 Select 委托。 当然,这是相当不直观的,这就是为什么通常不以这种方式使用 Select 的原因(否则每次枚举时,都会产生副作用,并且多次枚举会再次应用副作用。