Могу ли я использовать отражение, чтобы получить существующую переменную, указав ее имя? - PullRequest
1 голос
/ 05 июня 2011

Я беру на себя чью-то работу, и там много дублированного кода.Сейчас я просто хочу изменить следующий код: (код, который я хотел изменить, находится после этого блока кода)

        if (Session["opt3PSRAddHrs4"] != null)
        {
            lblDay4AddHrs.Text = "Additional Hours: " + (String)Session["opt3PSRAddHrs4"];
        }
        else
        {
            lblDay4AddHrs.Visible = false;
        }



        if (Session["opt3PSRAddHrs5"] != null)
        {
            lblDay5AddHrs.Text = "Additional Hours: " + (String)Session["opt3PSRAddHrs5"];
        }
        else
        {
            lblDay5AddHrs.Visible = false;
        }

        if (Session["opt3PSRAddHrs6"] != null)
        {
            lblDay6AddHrs.Text = "Additional Hours: " + (String)Session["opt3PSRAddHrs6"];
        }
        else
        {
            lblDay6AddHrs.Visible = false;
        }

        if (Session["opt3PSRAddHrs7"] != null)
        {
            lblDay7AddHrs.Text = "Additional Hours: " + (String)Session["opt3PSRAddHrs7"];
        }
        else
        {
            lblDay7AddHrs.Visible = false;
        }

на

for (int i = 0; i < 7; i++) {

   Label label = Reflection.getVariable(type = "Label", name = "lblDay" + i + "AddHrs");
   string sessionData = (string) Session["opt3PSRAddHrs" + i];
   if ( sessionData != null) {
      label.Text = "Additional Hours: " + sessionData;
   }
   else {
      label.Visible = false;
   }
}

с использованием отражения.Поскольку названия этих меток следуют за шаблоном, может ли отражение помочь?

(Кстати, возможно, размещение всех элементов opt3PSRAddHrs в массиве - хорошая идея, но вы знаете, сейчас я не хочу это менятьчасть кода ... Каждое изменение, вероятно, оставит несоответствие ...)

1 Ответ

4 голосов
/ 05 июня 2011

Отражение не ответ. Вместо этого вы должны использовать Page.FindControl метод .

Чтобы найти ярлык на уровне страницы, вы должны использовать:

Label label = (Label)FindControl("lblDay" + i + "AddHrs");

Обратите внимание, что вам нужно использовать его на контейнере, в котором хранятся ваши ярлыки. Например, если ваши ярлыки существуют в пределах Panel с ID="myPanel", вы должны использовать myPanel.FindControl(...).

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