【发布时间】:2017-04-27 14:02:27
【问题描述】:
具有以下 for 循环:
for (var i = list.Count - 1; i >= list.OrderBy(x => x).First(); i--)
if (list.Contains(i))
list.RemoveAt(i);
- 是否每次迭代都会检查 list.Count()?
- list.OrderBy(x => x.Key).First() 每次迭代都会执行吗
- 这应该是线程安全的吗?因为添加/删除?
我的意思是,在 for 循环执行期间,项目可能会被添加到列表中(在其他地方——在不同的方法中)
【问题讨论】:
-
使用调试器单步调试代码,并确切地查看调用的内容和时间。 (也就是说,您不会在显示的 sn-p 中的任何位置调用
list.Count(),因此它不会被调用根本。) -
for循环的第一部分在其他两个部分每次迭代执行一次后执行。 -
是的,orderby 将被执行。
-
@Servy,
for循环的第一部分是var i = list.Count() - 1。 -
@juharr 查看修订历史。他们在我评论后编辑了代码。