For循环是否在每次迭代时检查linq表达式

时间:2017-04-27 14:02:28

标签: c# .net

有以下for循环:

        for (var i = list.Count - 1; i >= list.OrderBy(x => x).First(); i--)
            if (list.Contains(i))
                list.RemoveAt(i);
  1. 每次迭代都会检查 list.Count()吗?
  2. list.OrderBy(x => x.Key).First()每次迭代都会执行
  3. 这应该是线程安全的吗?因为添加/删除?
  4. 我正在推动的是,在for循环执行期间,项目可能会被添加到列表中(其他地方 - 以不同的方法)

1 个答案:

答案 0 :(得分:0)

1:不,因为它只是起始值。该部分仅在循环开始时访问一次

2:是的,因为必须评估linq表达式以获得结果值。如果你想避免它在循环之前执行一次linq表达式并将其保存到一个单独的值中:

int end = list.OrderBy(x => x.Key).First(); 
for (var i = list.Count() - 1; i >= end; i--) 
    if (list.ContainsKey(i))
        list.RemoveAt(i)

编辑:

如果您的列表可能会动态更改,那么您现在使用它的方式当然是一个更好的解决方案,因为您可以适应这些更改。

问题3:this Answer表示Add方法线程安全