我有几个像这样的代码行,
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的范围内进行。我不知道如何在全局范围内调用带有值的变量。
答案 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;
}
}