Linq到XML显示错误“;使用未分配的局部变量&”;
本文关键字:分配 局部变量 XML 显示 错误 Linq | 更新日期: 2023-09-27 17:58:30
我很困惑为什么这会给我错误我认为我的代码是正确的
XElement outer = new XElement("Main");
XElement xsets;
XElement xsubsets;
foreach (DataRow nav_sets in GetNavigationSets().Rows)
{
if (nav_sets["parent_id"].ToString() == null)
{
xsets = new XElement("Menu", nav_sets["name"].ToString());
}
else
{
if (int.Parse(nav_sets["id"].ToString()) == int.Parse(nav_sets["parent_id"].ToString()))
{
xsubsets = new XElement("SubMenu", nav_sets["name"].ToString());
foreach (DataRow nav_menus in GetMenusInNavigationSetByNavigation(int.Parse(nav_sets["id"].ToString())).Rows)
{
foreach (DataRow menus in GetMenuById(int.Parse(nav_menus["menu_id"].ToString())).Rows)
{
xsubsets.Add(new XElement("MenuItem", menus["name"].ToString()));
}
}
}
xsets.Add(xsubsets);
}
outer.Add(xsets);
}
outer.Save("main.xml");
cn.Close();
错误部分显示在这行代码xsets.Add(xsubsets);
中
错误:
错误1使用未分配的局部变量"xsets"
错误2使用未分配的本地变量"xsubsets"
我很困惑如何才能摆脱这个错误。
从更改
XElement xsets;
XElement xsubsets;
至
XElement xsets = null;
XElement xsubsets = null;
您面临的问题是,编译器在编译时无法判断if语句的第一个大小写在第二个大小写之前。同样,在第二种情况下,它不知道在使用xsubsets
之前,if
语句会计算为true并创建它。虽然您可能知道这一点,因为预期输入的格式,编译器不能,并且会给你关于使用未赋值变量的错误。通过给变量一个初始值(甚至是null
),您就给了它们一个值,编译器就会确信您知道自己在做什么,并且没有犯错误。当然,如果你确实将它们设置为null
,然后在使用它们之前尝试引用它们的属性,你会得到一个运行时异常,但如果你已经确保满足其标准,编译器就不必担心这一点。
通过分配初始值null
来解决编译器警告。我的偏好是超越这一点,在使用null
值之前检查它们,这样您就可以抛出一个带有更有意义的错误消息的异常,并记录异常情况。