Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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# 是否可以将Thread.Sleep()放在一个列表中<;T>;弗雷奇?_C#_Linq - Fatal编程技术网

C# 是否可以将Thread.Sleep()放在一个列表中<;T>;弗雷奇?

C# 是否可以将Thread.Sleep()放在一个列表中<;T>;弗雷奇?,c#,linq,C#,Linq,是否可以在一条语句中重写以下代码 foreach(var myVar in varEnumerable) { MyMethod(myVar); Thread.Sleep(2000); } 如果没有线程.Sleep(),我会把它写成: varEnumerable.ToList().ForEach(x => MyMethod(x)); 是的,你只需要一些花括号(和空白的好办法): 编辑:在对这个问题的评论中已经注意到,这比普通的foreach效率低(由于ToList()调用

是否可以在一条语句中重写以下代码

foreach(var myVar in varEnumerable)
{
    MyMethod(myVar);
    Thread.Sleep(2000);
}
如果没有
线程.Sleep()
,我会把它写成:

varEnumerable.ToList().ForEach(x => MyMethod(x));

是的,你只需要一些花括号(和空白的好办法):

编辑:在对这个问题的评论中已经注意到,这比普通的foreach效率低(由于
ToList()
调用),而且当你添加大括号和空格时,它看起来没有任何干净,所以这不是一个真正的大胜利。因此,这就是你可以做你要求的事情的方法,但这可能不是你应该做的:)

那么:

varEnumerable.ToList().ForEach(x => {MyMethod(x);Thread.Sleep(2000);});
您可以使用赞许(
{}
)和分号(
)对多个命令进行分组


请注意,您可以在这样的环境中使用任何类型的指令(
用于
循环、指令等)

FYI,ForEach不是LINQ的一部分,它是列表中的一个方法。因此,不,不可能在LINQ语句中重写它:)@AndyJ是的,谢谢。注意并更新。正如AndyJ评论的那样,
ForEach
是属于
List
的常用方法(不是可枚举扩展方法之一)。所以你先列个清单(内存浪费)。这里的第二件事是lambda表达式在堆栈跟踪中看起来非常神秘(例如,当您研究异常情况时)。那么使用
ForEach()
有什么好处呢
foreach
绝对足够here@ASh这只是个人喜好。但除此之外,我不会把转换列表称为内存浪费。这只是一个O(n)操作,所以性能损失只会是巨大(读数十万)集合的问题。如果您不想延迟加载,那么它也很有用,因为在迭代发生时,原始集合可能已经被修改了,我不在这里寻找。如果我错了,请纠正我。这叫做“匿名方法”。就为了OP的knowledge@Alex这是lambda,而不是Anon方法@AndyJ这两种方法之间有一种联系。@Jeevan Jose我想说命名方法和anon方法比lambdas和anon方法更接近。lambda当然可以转换为委托,但它们也可以用在其他方面,如在链接中创建David B注释的表达式树。这里的“细线”是,在这种情况下,它们最终都会成为代理,但在其他情况下,lambda可能会非常不同。
varEnumerable.ToList().ForEach(x => {MyMethod(x);Thread.Sleep(2000);});