如何在全球范围内实现变量?

时间:2014-07-03 13:42:25

标签: c# asp.net

我有几个像这样的代码行,

public void rt_changed(object sender, AjaxControlToolkit.RatingEventArgs e)
{
    //Label l = sender as Label;
    foreach (DataListItem li in datalist.Items)
    { 

      Label l = li.FindControl("nl") as Label;

    }
    Label3.Text = l.ToString(); // l values is not getting
 }

这里变量l为null。我知道它正在发生,因为l的声明已经在foreach的范围内进行。我不知道如何在全局范围内调用带有值的变量。

3 个答案:

答案 0 :(得分:1)

您只需要在循环外部移动l变量的声明即可使其可用。您可以在与为其分配值的位置声明(告诉它是什么)。

public void rt_changed(object sender, AjaxControlToolkit.RatingEventArgs e)
{
  // Declare l, also give it a default value, in the case that datalist is empty.
  Label l = null;
  foreach (DataListItem li in datalist.Items)
  { 
    l = li.FindControl("nl") as Label;
  }
  Label3.Text = l.ToString(); // l values is not getting
}

请注意,l只会被分配到datalist集合中的最后一个值,这可能不是您想要的。

答案 1 :(得分:1)

在外部范围内声明变量:

 public void rt_changed(object sender, AjaxControlToolkit.RatingEventArgs e)
 {
     Label l = null;
     foreach (DataListItem li in datalist.Items)
     { 
          l = li.FindControl("nl") as Label;
     }          
     Label3.Text = (l == null ? string.Empty : l.Text); 
 }

还要确保在使用变量之前测试变量是否为null(以避免空指针异常);在示例中,我使用conditional operator进行了此操作。

提示1:使用更有意义的名称命名变量(' l'并没有多说)。

提示2:使用Text属性获取标签文字而不是ToString()

答案 2 :(得分:0)

简单,

public void rt_changed(object sender, AjaxControlToolkit.RatingEventArgs e)
    {
        //Label l = sender as Label;
        foreach (DataListItem li in datalist.Items)
        { 

          Label3.Text = (li.FindControl("nl") as Label).Text;

        }

     }