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; } }