如何从 foreach 循环内修改 foreach 迭代变量? [英] How to modify a foreach iteration variable from within foreach loop?

查看:38
本文介绍了如何从 foreach 循环内修改 foreach 迭代变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试这样做时...

When I try to do this...

Item[,] array = new Item[w, h];  // Two dimensional array of class Item, 
                                 //   w, h are unknown at compile time.
foreach(var item in array)
{
    item = new Item();
}

...我得到无法分配给'item',因为它是一个'foreach迭代变量'.

不过,我还是想这样做.

Still, I'd like to do that.

这个想法是为现有项目分配默认的 Item 类值.

The idea is to assign default Item class values to existing item.

推荐答案

好的,既然我们知道您的目标,而不是您试图如何实现它,那么回答您的问题就容易多了:你不应该使用 foreach 循环.foreach 是关于从集合中读取 项 - 不更改集合的内容.C# 编译器将迭代变量设为只读是一项很好的工作,否则它会让您更改 变量 的值,而不会实际更改集合.(必须有更重大的变化才能反映变化......)

Okay, now that we know your aim instead of how you were trying to achieve it, it's much easier to answer your question: you shouldn't be using a foreach loop. foreach is about reading items from a collection - not changing the contents of a collection. It's a good job that the C# compiler makes the iteration variable read-only, otherwise it would have let you change the value of the variable without that actually changing the collection. (There'd have to be more significant changes to allow changes to be reflected...)

我怀疑你只是想要:

for (int i = 0; i < array.GetLength(0); i++)
{
    for (int j = 0; j < array.GetLength(1); j++)
    {
        array[i, j] = new Item();
    }
}

假设它是一个矩形数组(一个 Item[,]).如果它是一个 Item[][] 那么它就是一个数组数组,你的处理方式会略有不同 - 很可能使用 foreach 进行外部迭代:

That's assuming it's a rectangular array (an Item[,]). If it's an Item[][] then it's an array of arrays, and you'd handle that slightly differently - quite possibly with a foreach for the outer iteration:

foreach (var subarray in array)
{
    for (int i = 0; i < subarray.Length; i++)
    {
        subarray[i] = new Item();
    }
}

这篇关于如何从 foreach 循环内修改 foreach 迭代变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆