有以下for循环:
for (var i = list.Count - 1; i >= list.OrderBy(x => x).First(); i--)
if (list.Contains(i))
list.RemoveAt(i);
我正在推动的是,在for循环执行期间,项目可能会被添加到列表中(其他地方 - 以不同的方法)
答案 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
方法不线程安全