1

很困惑为什么这给了我错误我认为我的代码是正确的

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'

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

4

2 回答 2

2

改变它从

XElement xsets;
XElement xsubsets;

XElement xsets = null;
XElement xsubsets = null;
于 2013-02-09T00:41:59.133 回答
1

您面临的问题是编译器无法在编译时判断 if 语句的第一种情况是在第二种情况之前采用的。同样在第二种情况下,它不知道xsubsets使用了 before ,该if语句将评估为 true 并创建它。虽然您可能会因为预期输入的格式而知道这一点,但编译器却不能并给出关于使用未分配变量的错误。通过给变量一个初始值(甚至null),你给它们一个值并且编译器很满意你知道你在做什么并且没有犯错误。当然,如果您确实将它们设置为null然后尝试在使用它们之前引用它们的属性,你会得到一个运行时异常,但如果你确定你满足它的标准,编译器的工作就不用担心这个了。

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

于 2013-02-09T00:55:21.227 回答