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

时间:2009-04-22 14:57:54

标签: c# object integer

想象一下,我们有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";
}

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

7 个答案:

答案 0 :(得分:4)

Label[] labels = new Label[] { label1, label2, label3, label4, label5 };

for (int i = 0; i < labels.Length; i++)
{
    labels[i].Text = "Foo";
}

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

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

HTH

修改

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

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

答案 6 :(得分:1)

假设我们在这里谈论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;
  }
}