Вопрос по каждому вопросу - PullRequest
1 голос
/ 02 февраля 2011

Я пытаюсь использовать оператор foreach.Я хотел бы иметь возможность сделать что-то вроде этого:

foreach (int item in itemcount)
  {
     label{0}.Text = item.ToString()
  }

Где {0} будет число в элементе.

Возможно ли это?

Ответы [ 8 ]

5 голосов
/ 02 февраля 2011

Вы можете сделать что-то вроде этого:

foreach (int item in itemcount)
{
    Controls[string.Format("label{0}", item.Id)].Text = item.ToString();
}

Также, если вам нужен доступ к свойствам класса меток, вам нужно привести левое выражение к классу меток.

1 голос
/ 03 февраля 2011

Если ваш класс - страница ASP.NET, тогда вы сможете найти ее с помощью FindControl:

foreach (int item in itemcount)
{
    string name = string.Format("label{0}", item);
    Label label = FindControl(name) as Label;
    if (label != null)
    {
        label.Text = name;
    }
}
0 голосов
/ 02 февраля 2011

Хотя код, подобный приведенным выше примерам, в строгом смысле отвечает на вопрос, кажется, что на самом деле очень плохой дизайн идет по этому пути.используя, вам гораздо лучше использовать какую-то другую технику.Массивы элементов управления являются одним из вариантов;если вы используете WPF, то это можно сделать довольно элегантно, используя список, который визуализирует его элементы как метки (вы должны получить это бесплатно, но если нет, было бы тривиально изменить ItemTemplate элемента управления - извините, яу меня не может быть никаких примеров).

0 голосов
/ 02 февраля 2011

Просто ради ответа, в зависимости от типа itemcount, вы можете написать:

Array.ForEach(itemcount, item => label[Convert.ToInt32(item)].Text = item.ToString());

, если itemcount - object[] или

itemcount.ForEach(item => label[Convert.ToInt32(item)].Text = item.ToString());

если itemcount является List<object>.

0 голосов
/ 02 февраля 2011
foreach (int item in itemcount)
  {
     label[label.IndexOf(item)].Text = item.ToString()
  }

Если мне нужно предположить, что «метка» является списком меток (List / IList), у вас есть индексатор, доступ к которому осуществляется с помощью [], а списки имеют метод IndexOf, принимающий данный существующий объект во всем списке, который возвращает индекс «предмета» - в списке -, как вы можете проверить в MSDN:

0 голосов
/ 02 февраля 2011

Является ли "метка" массивом? Тогда вы должны сделать это:

label[item] = item.ToString();

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

0 голосов
/ 02 февраля 2011

От верха моей головы, ответ - нет. Поскольку у вас нет доступа к итератору, используется цикл foreach.

Вместо этого сделайте что-то вроде этого

IList<Label> labels = new ArrayList<Label>();
for(int i = 0;i<labels.count;i++)
{
    labels[i].text = i.toString();
}
0 голосов
/ 02 февраля 2011

Если вы пытаетесь программно получить доступ к имени переменной, вам нужно использовать Reflection.

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