Linq to XML显示错误“使用未分配的局部变量..”?

时间:2013-02-09 00:38:43

标签: c# linq-to-xml

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

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'

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

2 个答案:

答案 0 :(得分:2)

更改
XElement xsets;
XElement xsubsets;

XElement xsets = null;
XElement xsubsets = null;

答案 1 :(得分:1)

您遇到的问题是编译器无法在编译时告诉if语句的第一种情况是在第二种情况发生之前。同样在第二种情况下,它不知道在使用xsubsets之前,if语句将评估为true并创建它。虽然您可能因为预期输入的格式而知道这一点,但编译器不能并且为您提供有关使用未分配变量的错误。通过给变量一个初始值(偶数null),你给它们一个值,编译器就会知道你知道你在做什么并且没有犯错误。当然,如果你把它们设置为null,然后在使用它们之前尝试引用它们的属性,你将得到一个运行时异常,但如果你已经担心编译器的工作不是确保你满足其标准。

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