c# - IOrderedEnumerable<XElement> 返回 NullReferenceException

标签 c# wpf xml

我目前遇到一个问题,我从以下方法中得到了 NullReferenceException:

    public void LoadValueXML()
    {
        XDocument myxml = XDocument.Load(@"config.xml");
        Items = myxml.Element("Values").Elements("Item").OrderBy(x => x.Attribute("ID"));
        ItemsLength = Items.Count();
    }

我尝试设置 Items 变量的方法中的第四行生成了异常。我的 XML 文档的格式如下:

<?xml version="1.0" encoding="utf-8" ?>
<Values>
  <Item ID="1" Type="Command" Value="330MV,60HZ"/>
  <Item ID="2" Type="Command" Value="600MV,13KHZ"/>
  <Item ID="3" Type="Command" Value="3.3V,60HZ"/>
  <Item ID="4" Type="Notification" Value="Look At This!!!" />
</Values>

我似乎找不到问题所在。看起来一切都很好地加载到 XDocument 中。在调试器中,它显示 XDocument 不为空,但是当我尝试设置 Items 时,它仍然会抛出异常。在此先感谢您为解决此问题提供的任何帮助。

附带说明:尝试使用 XDocument.Parse() 而不是 XDocument.Load() 会返回 "Data at the root level is invalid. Line 1, position 1."异常。

编辑:

在遵循 cdhowie 的建议后,我当前的方法如下所示:

    public void LoadValueXML()
    {
        XDocument myxml = XDocument.Load(@"config.xml");
        var values = myxml.Element("Values");
        var items = values.Elements("Item");
        Items = items.OrderBy(x => x.Attribute("ID"));
        ItemsLength = Items.Count();
    }

values为空,项目返回“枚举未产生任何结果”。它不再抛出异常,但仍然无法正常工作。

编辑 2:

遵循 Jeyaram J 的建议的新方法:

    public void LoadValueXML()
    {
        XDocument myxml = XDocument.Load(@"config.xml");
        var items = myxml.Root.Elements("Item");
        Items = items.OrderBy(x => x.Attribute("ID"));
        ItemsLength = Items.Count();
    }

它部分起作用但抛出“至少一个对象必须实现 IComparable”。异常。

最佳答案

尝试使用 Root 而不是 Element。

public void LoadValueXML()
{
    XDocument myxml = XDocument.Load("config.xml");
    Items = myxml.Root.Elements("Item").OrderBy(x => (int)x.Attribute("ID"));
    ItemsLength = Items.Count();
}

如果不行请告诉我

关于c# - IOrderedEnumerable<XElement> 返回 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17617831/

相关文章:

c# - 如何实现 Singleton,它在 C# 中从 db 填充其值?

javascript - 在 data-ajax-success 调用中以编程方式在 ValidationSummary 中添加错误

c# - 重新编译Silverlight以解决WPF问题

Wpf 视口(viewport)坐标

c# - 简单的 WPF 示例会导致内存增长失控

c# - 如何解析 XML 数据以检索子节点值?

xml - 使用Dart解码Windows 1255

xml - 使用XSLT删除空/不需要的节点

c# - 访问客户端添加的列表框项目

c# - 如何在 C# 中表示一个数字是长整数还是小数?