我想在表单中创建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:因为它是一个foreach迭代变量,所以无法分配lb。
有解决方案吗?
答案 0 :(得分:1)
您可以使用@Phils和@rickvdbosch所描述的for循环,但是可以使用Enumerable.Select
来保持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
}
答案 1 :(得分:0)
您不能将其分配给lb
变量,因为它是一个foreach
迭代变量,因此它处于只读上下文中。这就是为什么您得到Compiler Error CS1656:
在只读上下文中发生对变量的赋值时,将发生此错误。只读上下文包括foreach迭代变量,使用变量和固定变量。要解决此错误,请避免在
using
块,foreach
语句和fixed
语句中分配给语句变量。
尝试for
循环:
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;
}
答案 2 :(得分:0)
您需要使用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;
}
答案 3 :(得分:0)
您不能在foreach
循环中分配值:您还应该在编辑器中看到标记的lb = new Label();
,它应该告诉您
由于它是“ foreach迭代变量”,因此无法分配给“ lb”
会生成一个Compiler Error CS1656。
您可以使用Enumerable.Range一行(除了其他人已经提出的建议)执行此操作:
var Lb_clubs = Enumerable.Range(0, 32).Select(l => new Label() { Text = "SomeText" }).ToArray();
稍有不同,使用枚举的索引向文本添加一个渐进值,并在需要时还为Label分配一个名称(和/或其他值):
var Lb_clubs = Enumerable.Range(0, 32).Select(idx => new Label() {
Text = "SomeText" + idx.ToString(),
Name = "SomeName" + idx.ToString() }).ToArray();