c# - 我可以使用反射通过提供名称来获取现有变量吗?

标签 c# asp.net reflection refactoring

我接手了别人的工作,有很多重复的代码。目前,我只想更改以下代码:(我要更改的代码在这 block 代码之后)

        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 东西放在一个数组中是个好主意,但你知道,现在我不想更改那部分代码......每次更改都可能会留下不一致......)

最佳答案

反射(reflection)不是答案。你应该使用 Page.FindControl method相反。

要在页面级别查找标签,您可以使用:

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

请注意,您需要在装有标签的容器上使用它。例如,如果您的标签存在于具有 ID="myPanel"Panel 中,您将使用 myPanel.FindControl(...)

关于c# - 我可以使用反射通过提供名称来获取现有变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6240385/

相关文章:

c# - 事件处理程序始终为空

haskell - GHC 7.8 中“不能”输入哪些内容?

java - 流按运行时参数排序

c# - .NET Core netstandard 1.2 类库中不存在 BindingFlags

c# - 如何使用 Dapper 高效地选择聚合对象?

c# - 从 3.1.4 范围更新身份服务器 4 4.0.0 后,使用 Mongo DB 的 asp.net core 3 无效

c# - 使用 Stream 时使用请求头传递参数

c# - 删除字符串中的非数字字符

c# - 使用 DTD 验证 - 强制关闭连接

c# - 列出 View 中ViewBag的内容