窗口里有一个panel1
第一段代码:
private void button1_Click(object sender, EventArgs e)
{
Panel panel; //声明一个Panel类型的变量
panel = panel1; //panel等于panel1
foreach (Control c in panel.Controls) //没报错
{ }
}
第二段代码:
private void button1_Click(object sender, EventArgs e)
{
Panel panel; //声明一个Panel类型的变量
foreach (Control c in this.Controls) //遍历到窗口中的panel1
{
if (c is Panel)
{
panel = c as Panel;
}
}
foreach (Control c in panel.Controls) //报错:使用了未赋值的局部变量panel
{
}
}我想问,两段代码,都差不多,为什么第二段代码要报错:使用了未赋值的局部变量panel...我不是已经赋值了吗?
panel = c as Panel;
第一段代码:
private void button1_Click(object sender, EventArgs e)
{
Panel panel; //声明一个Panel类型的变量
panel = panel1; //panel等于panel1
foreach (Control c in panel.Controls) //没报错
{ }
}
第二段代码:
private void button1_Click(object sender, EventArgs e)
{
Panel panel; //声明一个Panel类型的变量
foreach (Control c in this.Controls) //遍历到窗口中的panel1
{
if (c is Panel)
{
panel = c as Panel;
}
}
foreach (Control c in panel.Controls) //报错:使用了未赋值的局部变量panel
{
}
}我想问,两段代码,都差不多,为什么第二段代码要报错:使用了未赋值的局部变量panel...我不是已经赋值了吗?
panel = c as Panel;
你第二段代码Panel panel; //声明一个Panel类型的变量
只是声明有这么个panel,但是没有给他显示赋值
所以语法检查认为这个地方"Use of unassigned local variable 'panel'"其实代码逻辑上是没问题的
改成Panel panel = null; //声明一个Panel类型的变量就能通过编译了
Panel panel = null;
按照规矩
因为if里面的东西有可能执行,也有可能不执行,所以不能算显式赋值
显示赋上值
Panel panel = null;呢?
给声明的panel赋上一个初始值
List<int> lis =null; //我赋了初始值
lis.Add(0); //报错,未将对象引用到实例
lis.Add(1);
lis.Add(3);
lis.Add(6);
我赋值了,为什么要报错呢?
你还没实例化呢
lis=new List<int>();上例有panel = c as Panel你比较一下
那该怎么写呢?
List<int> lis = new List<int>(); //添一句吗?
List<int> lis =null; //再赋初始值
lis.Add(0);
lis.Add(1);
lis.Add(3);
lis.Add(6);是不是添一句new语句,然后赋初始值?感觉很别扭...
List<int> lis=new List<int>();也可以
List<int> lis =null;
lis=new List<int>();兄弟,学得有点机械化了
new一下,就是在内存开一片空间,就可以往里加数据了
{
foreach(Control ctr in parent.Controls)
{
if(ctr is Panel)
{
return ctr as Panel;
}
Panel pnl = GetPanel(ctr);
if(pnl != null)
{
return pnl;
}}
return null;
}private void button1_Click(object sender, EventArgs e)
{
Panel panel; //声明一个Panel类型的变量
panel= GetPanel(this);
if(panel != null)
{
foreach (Control c in panel.Controls) //报错:使用了未赋值的局部变量panel
{
}
}}