Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单C#foreach to LINQ问题_C#_Linq - Fatal编程技术网

简单C#foreach to LINQ问题

简单C#foreach to LINQ问题,c#,linq,C#,Linq,目前有: foreach (var series in Chart1.Series) { series.Enabled = false; } 我想用一个简单的一行表达式来表达这一点。我认为这会奏效: Chart1.Series.Select( series => series.Enabled = false); 然而,这没有任何效果。大概是因为我误解了Select的工作原理,这很好 我的下一个想法是执行类似Chart1.Series.ForEach(Series=>Series

目前有:

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没有实现IEnumerable(…或者至少ForEach不是一个可接受的调用方法)


我不想做
Chart1.Series=Chart1.Series.ToList().ForEach(Series=>Series.Enabled=false),但这可能是最简单的选择?

您的第一个foreach循环非常清晰,而且可以工作,所以为什么需要用LINQ替换它,它不会更清晰或更快

否则我不认为它会比你上面说的更简单

Chart1.Series.ToList().ForEach( series => series.Enabled = false);

您想做的事情最好使用
foreach
。您正在迭代一系列元素并修改这些元素。这就是foreach的作用

Linq用于获取一个元素序列,并基于某些标准/转换生成一个新序列。不是你想要的。

简单一句:)


至于Select不起作用的具体原因,请记住Select返回一个
IEnumerable
,这是一个知道如何枚举的对象。换句话说,您有一个可以枚举但尚未枚举的引用。所以如果你拿这个:

var series = Chart1.Series.Select( s => s.Enabled = false);
foreach (var s in series) {}

您将获得预期的效果,因为现在您正在枚举该系列,并因此调用Select委托。当然,这是非常不直观的,这就是为什么Select通常不以这种方式使用(否则每次枚举都会产生副作用,并且多次枚举会再次应用副作用。)

转换到列表永远不会比只遍历元素更简单。LINQ代表语言集成查询。Enabled=false不是查询。foreach怎么了?哦,是的。你是对的——我回去查看了我之前的所有帖子,确保我接受并投票通过了相关的答案。但是,有一些人留下了没有帮助的回复。你可以尝试使用一个numerable()而不是ToList(),但我不确定你是否真的得到了什么…ToList()创建了数据的副本,对吗?我相信你的声明对Chart1.Series没有影响。我之所以改变它,是因为我正试图逐渐将自己介绍给更复杂的LINQ命令,但我没有太多的时间研究LINQ——所以我会尽可能地采取一些小的学习步骤。你试过了吗?引用数据的副本将完成实际数据的工作。在第一个示例中,变量series包含对series对象引用的副本。与ToList()创建新对象的方式相同,但包含对相同ItemsInTesting的引用!那个事实上,这解释了很多。谢谢
var series = Chart1.Series.Select( s => s.Enabled = false);
foreach (var s in series) {}