C #: Как я могу назначить много переменных с целым числом (я) в для цикла? - PullRequest
0 голосов
/ 22 апреля 2009

Представьте, что у нас есть 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 ]

4 голосов
/ 22 апреля 2009

Как уже говорили другие, массив (или другая коллекция) - гораздо лучший способ сделать это.

Представьте, что массив - это просто набор переменных, к которым вы всегда обращаетесь по индексу.

Я не могу придумать причину, по которой вы хотели бы иметь набор переменных, как показано в вашем вопросе. Если у вас абсолютно есть для этого, и они являются экземплярами / статическими переменными, вы можете использовать отражение для доступа к ним, если вы действительно этого хотите, - но использование массива или другой коллекции будет намного, намного лучше.

4 голосов
/ 22 апреля 2009
Label[] labels = new Label[] { label1, label2, label3, label4, label5 };

for (int i = 0; i < labels.Length; i++)
{
    labels[i].Text = "Foo";
}
2 голосов
/ 22 апреля 2009

Вы можете перебирать элементы управления родительского ярлыка:

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

НТН

EDIT:

После вашего редактирования единственный способ, который я мог бы увидеть - это добавить их в список / массив / словарь и выполнить итерацию по нему, хотя принцип тот же.

2 голосов
/ 22 апреля 2009

Вы можете получить доступ к элементам управления по имени, но было бы намного понятнее добавить массив элементов меток на страницу, а затем получить доступ к массиву с помощью целого числа.

1 голос
/ 22 апреля 2009

Предполагая, что мы говорим о веб-формах, есть метод 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;
  }
}
1 голос
/ 22 апреля 2009

Если все метки имеют одного и того же родителя, и у этого родителя нет других элементов управления метками, содержащихся внутри, вы можете сделать следующее:

foreach (Control lbl in ParentControl)
{
    if (lbl is TextBox)
    {
        ((Label)lbl).Text = "Foo";
    }
}
1 голос
/ 22 апреля 2009

Вы можете создать массив или список меток массива и поместить в них свою метку. Тогда вы можете сделать что-то похожее на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...