目前有这个:
foreach (var series in Chart1.Series)
{
series.Enabled = false;
}
我想用简单的一行表达来表达这一点。我认为这样可行:
Chart1.Series.Select( series => series.Enabled = false);
然而,这没有任何效果。大概是因为我误解了Select是如何工作的,这很好。
我的下一个想法是做一些像Chart1.Series.ForEach(series => series.Enabled = false),但Chart1.Series没有实现IEnumberable(..或至少ForEach不是一个可接受的方法来调用)。
我宁愿不做Chart1.Series = Chart1.Series.ToList().ForEach( series => series.Enabled = false);
,但也许这是最简单的选择?
答案 0 :(得分:6)
foreach
是您尝试做的首选。您正在迭代一系列元素并修改元素。这就是foreach
的用途。
Linq用于获取一个元素序列并根据某些条件/转换生成新序列。不是你想要的。
答案 1 :(得分:1)
简单和一行:)
foreach (var series in Chart1.Series) { series.Enabled = false; }
答案 2 :(得分:0)
你的第一个foreach循环非常清晰且有效,所以为什么需要用LINQ替换它,它不会更清晰或更快。
否则我不认为它会比你上面说的更简单
Chart1.Series.ToList().ForEach( series => series.Enabled = false);
答案 3 :(得分:0)
至于您的Select不起作用的具体原因,请记住Select返回IEnumerable<T>
,这是一个知道如何枚举的对象。换句话说,您可以引用可枚举的内容,但尚未枚举。所以,如果你这样做:
var series = Chart1.Series.Select( s => s.Enabled = false);
foreach (var s in series) {}
您将获得预期的效果,因为现在您正在枚举系列并因此调用Select委托。当然,这是非直观的,这就是为什么Select通常不会以这种方式使用的原因(否则每次枚举时,你都会有副作用并且不止一次枚举会再次应用副作用。)