C# 如何实现变量的全局性?

C# 如何实现变量的全局性?,c#,asp.net,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 =

我有一些这样的代码行

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的范围内做出的。我不知道如何全局调用带有值的变量。

您只需要将
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
集合中的最后一个值,这可能不是您想要的。

在外部范围中声明变量:

 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(以避免null指针异常);在本例中,我使用

提示1:用一个更有意义的名称命名变量('l'不多说)

提示2:使用
Text
属性来获取标签文本,而不是
ToString()
它很简单

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;

        }

     }

但在这种情况下,我能得到l对label3的值吗?是的。您的变量将在事件处理程序中的任何位置可用。我在这里得到System.Web.UI.WebControl.Label来代替label3。@Anders Abel。你是对的,正如你所说,我只得到数据列表中的最后一个值。我如何更改代码才能如愿以偿?@gkrishy这是另一个问题,请将其作为新问题发布。关于堆栈溢出的评论不适合后续问题。我不想这样。因为,我需要在这个范围内调用更多行的标签值。根据您的回答,我不会得到超出范围的标签值,即使Label3是一个控件。你可以在那个页面的任何地方访问Label3,对吗?我还是得到了同样的结果。System.Web.UI.WebControl.Label正在传递标签值的位置。请使用Text属性而不是ToString()