C#:如何在for循环中为整数(i)分配许多变量?

想象一下,我们有5个字符串变量,我们想在运行时为它们分配“Foo”。

而不是这个

string a1 = "Foo"; string a2 = "Foo"; string a3 = "Foo"; string a4 = "Foo"; string a5 = "Foo"; 

我们不能使用这样的东西:

 for(int i = 0;i < 5;i++) { a+i = "Foo"; } 

是否无法以类似的方式访问它们?

正如其他人所说,数组(或其他集合)是一种更好的方法。

将数组视为您始终通过索引访问的变量集合。

我想不出你为什么想要有一组变量,如你的问题所示。 如果你必须这样做,并且它们是实例/静态变量,你可以使用reflection来访问它们,如果你真的想要 – 但使用数组或其他集合会更好。

 Label[] labels = new Label[] { label1, label2, label3, label4, label5 }; for (int i = 0; i < labels.Length; i++) { labels[i].Text = "Foo"; } 

您可以按名称访问控件,但是向页面添加标签项数组然后使用整数访问数组会更加清晰。

您可以通过迭代标签的父控件:

 for (int i=0; i<= parent.controls.count(); i++) { if (parent.controls("label" + i) != null) { ... } } 

HTH

编辑:

编辑之后,我能看到的唯一方法就是将它们添加到列表/数组/字典并迭代它,尽管原理是相同的。

您可以创建标签的数组或数组列表,并将标签放入其中。 然后你可以做类似的事情。

如果所有标签都具有相同的父标签,并且该父标签中没有其他标签控件,则可以执行以下操作:

 foreach (Control lbl in ParentControl) { if (lbl is TextBox) { ((Label)lbl).Text = "Foo"; } } 

假设我们在这里谈论webforms,你可以使用FindControl()方法。

 private void Button1_Click(object sender, EventArgs MyEventArgs) { // Find control on page. TextBox myControl1 = (TextBox) FindControl("Label1"); if(myControl1!=null) { string message = myControl1.Text; } }