0

假设我们有 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";
}

是否不可能以类似的方式访问它们?

4

7 回答 7

4

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

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

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

于 2009-04-22T15:07:03.560 回答
4
Label[] labels = new Label[] { label1, label2, label3, label4, label5 };

for (int i = 0; i < labels.Length; i++)
{
    labels[i].Text = "Foo";
}
于 2009-04-22T15:03:39.933 回答
2

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

于 2009-04-22T15:00:19.100 回答
2

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

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

高温高压

编辑:

在您进行编辑之后,我能看到的唯一方法是将它们添加到列表/数组/字典并遍历它,尽管原理是相同的。

于 2009-04-22T15:02:31.327 回答
1

假设我们在这里讨论的是网络表单,那么您可以使用 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;
  }
}
于 2009-04-22T15:08:26.287 回答
1

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

于 2009-04-22T15:01:13.280 回答
1

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

foreach (Control lbl in ParentControl)
{
    if (lbl is TextBox)
    {
        ((Label)lbl).Text = "Foo";
    }
}
于 2009-04-22T15:04:07.483 回答