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"

我很困惑如何才能摆脱这个错误。

Linq到XML显示错误“;使用未分配的局部变量&”;

从更改

XElement xsets;
XElement xsubsets;

XElement xsets = null;
XElement xsubsets = null;

您面临的问题是,编译器在编译时无法判断if语句的第一个大小写在第二个大小写之前。同样,在第二种情况下,它不知道在使用xsubsets之前,if语句会计算为true并创建它。虽然您可能知道这一点,因为预期输入的格式,编译器不能,并且会给你关于使用未赋值变量的错误。通过给变量一个初始值(甚至是null),您就给了它们一个值,编译器就会确信您知道自己在做什么,并且没有犯错误。当然,如果你确实将它们设置为null,然后在使用它们之前尝试引用它们的属性,你会得到一个运行时异常,但如果你已经确保满足其标准,编译器就不必担心这一点。

通过分配初始值null来解决编译器警告。我的偏好是超越这一点,在使用null值之前检查它们,这样您就可以抛出一个带有更有意义的错误消息的异常,并记录异常情况。