C# 如何使用foreach初始化标签数组中的标签?

C# 如何使用foreach初始化标签数组中的标签?,c#,.net,winforms,foreach,iteration,C#,.net,Winforms,Foreach,Iteration,我想在表单中创建32个标签,因此我使用了如下代码: //using System.Windows.Forms; Label[] Lb_clubs; Lb_clubs = new Label[32]; foreach(Label lb in Lb_clubs) { lb = new Label(); lb.Text = "somename"; //and other codes } 但是我犯了个错误 CS1656:无法分配lb,因为它是foreach迭代变量 有任何解决方案吗?您不能

我想在表单中创建32个标签,因此我使用了如下代码:

//using System.Windows.Forms;
Label[] Lb_clubs;
Lb_clubs = new Label[32];
foreach(Label lb in Lb_clubs)
{
  lb = new Label();
  lb.Text = "somename";
  //and other codes
}
但是我犯了个错误

CS1656:无法分配lb,因为它是foreach迭代变量


有任何解决方案吗?

您不能分配给
lb
变量,因为它是一个
foreach
迭代变量,因此它位于只读上下文中。这就是为什么你会得到:

在只读上下文中发生变量赋值时,会发生此错误。只读上下文包括foreach迭代变量、使用变量和固定变量。要解决此错误,请避免使用
块、
foreach
语句和
fixed
语句在
中指定语句变量

-循环尝试一个

Label[] Lb_clubs;
Lb_clubs = new Label[32];
for (int i = 0; i < 32; i++)
{
    var lb = new Label();
    lb.Text = "somename";
    //and other codes
    Lb_clubs[i] = lb;
}
Label[]Lb_俱乐部;
Lb_俱乐部=新标签[32];
对于(int i=0;i<32;i++)
{
var lb=新标签();
lb.Text=“somename”;
//和其他代码
磅(i)=磅;;
}

您需要使用for循环,而不是foreach循环

            Label[] Lb_clubs;
            Lb_clubs = new Label[32];

            for (int i = 0; i < 32; i++)
            {
                var lb = new Label();
                lb.Text = "somename";
                //and other codes
                Lb_clubs[i] = lb;
            }
Label[]Lb_俱乐部;
Lb_俱乐部=新标签[32];
对于(int i=0;i<32;i++)
{
var lb=新标签();
lb.Text=“somename”;
//和其他代码
磅(i)=磅;;
}

您可以使用@Phils和@rickvdbosch所描述的for循环,但您可以使用
枚举来保持foreach循环。选择

//using System.Windows.Forms;
Label[] Lb_clubs;
Lb_clubs = new Label[32].Select(lbl => new Label()).ToArray();
foreach (Label lb in Lb_clubs)
{
    lb.Text = "somename";
    //and other codes
}

不能在
foreach
循环中赋值:还应该看到
lb=new Label()在编辑器中标记,它应该告诉您

无法分配给“lb”,因为它是“foreach迭代变量”

这就产生了一个新的问题

您可以在一行中执行此操作(除了其他人已经建议的操作外),使用:

稍有不同,使用枚举索引向文本中添加累进值,并在需要时为标签指定名称(和/或其他值):

var Lb_clubs = Enumerable.Range(0, 32).Select(idx => new Label() { 
    Text = "SomeText" + idx.ToString(), 
    Name = "SomeName" + idx.ToString() }).ToArray();
var Lb_clubs = Enumerable.Range(0, 32).Select(idx => new Label() { 
    Text = "SomeText" + idx.ToString(), 
    Name = "SomeName" + idx.ToString() }).ToArray();