真是郁闷啊,我在编写形成树的程序时,居然给我提示“使用了未赋值的局部变量rootNode”,下面是我的部分代码,我的rootNode变量可是在while里进行了赋值的啊。
private void InitDeptTree()
{
Infragistics.WebUI.UltraWebNavigator.Node rootNode; //这里我使用了Infragistics系列控件组. string strconn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(strconn);
SqlCommand cmd = new SqlCommand("Select Company_Name from OA_Company", conn);
conn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{ //这实际上是到表里去读取树的树结点的信息,这个表里只有一条记录。
string rootname = sdr.GetSqlString(0).ToString();
rootNode = DeptTreeView.Nodes.Add(rootname, -1); //这里不就对rootNode进行了赋值了吗?
}
Label1.Text = rootNode.ToString();
//这一句是我加的测试语句,问题就出在这里,提示说“使用了未赋值的局部变量。如果我将这一句放进While语句里,即rootNode=DeptTreeView.Nodes.Add(rootName,-1);后的话,系统就不会提这个错误。难道这个rootNode变量一离开While循环后,它的值就没有了吗????
conn.Close();
.......
}
private void InitDeptTree()
{
Infragistics.WebUI.UltraWebNavigator.Node rootNode; //这里我使用了Infragistics系列控件组. string strconn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(strconn);
SqlCommand cmd = new SqlCommand("Select Company_Name from OA_Company", conn);
conn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{ //这实际上是到表里去读取树的树结点的信息,这个表里只有一条记录。
string rootname = sdr.GetSqlString(0).ToString();
rootNode = DeptTreeView.Nodes.Add(rootname, -1); //这里不就对rootNode进行了赋值了吗?
}
Label1.Text = rootNode.ToString();
//这一句是我加的测试语句,问题就出在这里,提示说“使用了未赋值的局部变量。如果我将这一句放进While语句里,即rootNode=DeptTreeView.Nodes.Add(rootName,-1);后的话,系统就不会提这个错误。难道这个rootNode变量一离开While循环后,它的值就没有了吗????
conn.Close();
.......
}
while (sdr.Read())
{ //这实际上是到表里去读取树的树结点的信息,这个表里只有一条记录。
rootname = sdr.GetSqlString(0).ToString();
rootNode = DeptTreeView.Nodes.Add(rootname, -1); //这里不就对rootNode进行了赋值了吗?
}
Label1.Text = rootNode.ToString();
sdr肯定能读到记录,而且只有一条记录。
SqlDataReader sdr = cmd.ExecuteReader();
将这个While语句取消,反正该表里只有一条记录。当然这个程序在实际中可能崩溃,那就是表里真的没有一条记录。
sdr.Read();
string rootname = sdr.GetSqlString(0).ToString();
rootNode = DeptTreeView.Nodes.Add(rootname, -1);这样一来,该错误不提示了,运行也正常,但这是为什么呢? 没超过变量的使用范围,但未啥就出现”未赋值“的错误提示呢?
while是在为TRUE的时候才循环,如果第一次就为FALSE的话呢?那肯定就退出循环了啊!//这实际上是到表里去读取树的树结点的信息,这个表里只有一条记录
不过你这样说了,那就不清楚了
因为.NET不能保证你循环里面一定有值,类似于使用 Session["dddd"].ToString() 的时候不管里面有没有值一定要判定是否为null,否则.NET就会报错
//if块/switch块/while之类有条件判断的块内对XXX赋值;
object yyy = xxx;//这样才不会出错.