C# 如何使用foreach初始化标签数组中的标签?
我想在表单中创建32个标签,因此我使用了如下代码: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迭代变量 有任何解决方案吗?您不能
//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();