Tag: foreach

是否有一个C#在foreach中重用该variables的原因?

在C#中使用lambdaexpression式或匿名方法时,我们必须警惕修改的闭包陷阱。 例如: foreach (var s in strings) { query = query.Where(i => i.Prop == s); // access to modified closure … } 由于修改了闭包,上面的代码将导致查询中的所有Where子句基于s的最终值。 正如在这里解释的,这是因为在foreach循环中声明的svariables在编译器中是这样翻译的: string s; while (enumerator.MoveNext()) { s = enumerator.Current; … } 而不是像这样: while (enumerator.MoveNext()) { string s; s = enumerator.Current; … } 正如这里指出的那样,在循环之外声明一个variables没有任何性能优势,在正常情况下,我可以考虑的唯一原因是如果您打算在循环范围之外使用该variables: string s; while (enumerator.MoveNext()) { s = enumerator.Current; … […]

为foreach()提供的参数无效

我经常碰巧处理的数据可以是一个数组,也可以是一个空variables,并用这些数据提供一些foreach数据。 $values = get_values(); foreach ($values as $value){ … } 当您使用不是数组的数据提供foreach时,会收到警告: 警告:为foreach()提供的无效参数[…] 假设无法重构get_values()函数总是返回一个数组(向下兼容性,不可用的源代码,无论其他原因),我想知道哪个是最干净和最有效的方法来避免这些警告: 将$values投射到数组 将$values初始化为数组 用if包装foreach 其他(请build议)

PHP的foreach实际上是如何工作的?

让我先说这个,我知道什么是foreach ,是否和如何使用它。 这个问题涉及到它是如何在引擎盖下工作的,我不希望有任何答案,“这是如何循环使用foreach的数组”。 很长一段时间,我认为foreach与数组本身一起工作。 然后,我发现它提供了许多与该数组副本一起工作的事实,而我从此认为这是故事的结尾。 但是最近我就这个问题进行了讨论,经过一番小小的实验,发现事实上并不是100%的事实。 让我表明我的意思。 对于以下testing用例,我们将使用以下数组: $array = array(1, 2, 3, 4, 5); testing案例1 : foreach ($array as $item) { echo "$item\n"; $array[] = $item; } print_r($array); /* Output in loop: 1 2 3 4 5 $array after loop: 1 2 3 4 5 1 2 3 4 5 */ 这清楚地表明我们不直接使用源数组 – 否则循环会一直持续下去,因为我们在循环过程中不断地将项目推到数组上。 […]

Java为每个循环如何工作?

考虑: List<String> someList = new ArrayList<String>(); // add "monkey", "donkey", "skeleton key" to someList for (String item : someList) { System.out.println(item); } 没有使用for each语法,等价for循环是什么样的?

对于JavaScript中的每个数组?

我怎样才能循环使用JavaScript中的数组中的所有条目? 我以为是这样的: forEach(instance in theArray) arrays是我的arrays,但这似乎是不正确的。

为什么我没有在这个例子中得到一个java.util.ConcurrentModificationException?

注意:我知道Iterator#remove()方法。 在下面的代码示例中,我不明白为什么main方法中的List.remove抛出ConcurrentModificationException ,但不在 remove方法中。 public class RemoveListElementDemo { private static final List<Integer> integerList; static { integerList = new ArrayList<Integer>(); integerList.add(1); integerList.add(2); integerList.add(3); } public static void remove(Integer toRemove) { for(Integer integer : integerList) { if(integer.equals(toRemove)) { integerList.remove(integer); } } } public static void main(String… args) { remove(Integer.valueOf(2)); Integer toRemove = Integer.valueOf(3); for(Integer integer : integerList) […]