Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 导入XML时什么是null?_C#_Xml_Visual Studio 2010_Nullreferenceexception - Fatal编程技术网

C# 导入XML时什么是null?

C# 导入XML时什么是null?,c#,xml,visual-studio-2010,nullreferenceexception,C#,Xml,Visual Studio 2010,Nullreferenceexception,我试图从xml文件导入数据并按顺序排序,但当我运行它时,我得到“对象引用未设置为对象的实例” XElement data = XElement.Load("blockData.xml"); var sortedElements = from c in data.Element("BLOCKS").Elements("BLOCK") orderby (string)c.Element("X") descending, (string)c.Element("Y") descend

我试图从xml文件导入数据并按顺序排序,但当我运行它时,我得到“对象引用未设置为对象的实例”

XElement data = XElement.Load("blockData.xml");

var sortedElements = 
from c in data.Element("BLOCKS").Elements("BLOCK")
orderby (string)c.Element("X") descending,
        (string)c.Element("Y") descending,
        (string)c.Element("Z") descending
        select new
        {
            name1 = (string)c.Element("NAME"),
            X1 = (string)c.Element("X"),
            Y1 = (string)c.Element("Y"),
            Z1 = (string)c.Element("Z")
        };
 foreach (var r in sortedElements)
 Console.WriteLine("X:{0} Y:{1} Z:{2} Name:{3}",
          r.X1, r.Y1, r.Z1, r.name1);
以及XML文件中包含的内容的示例

<BLOCKS>
  <BLOCK>
   <NAME>B1</NAME>
   <X>0</X>
   <Y>0</Y>
   <Z>0</Z>
  </BLOCK>
</BLOCKS>
<root>

    <BLOCKS> . . . </BLOCKS>

</root>

地下一层
0
0
0
试试:

var sortedElements = 
from c in data.Root.Elements("BLOCK")

因为块是XML的根。

在了解了一些人的建议并研究了其他类似问题后,我发现您需要显式访问节点的值,如下图所示,以克服nullreference异常的问题

var sortedElements =
    from c in data.DescendantsAndSelf("BLOCKS").Elements("BLOCK")
    orderby 
         c.Element("X").Value descending,
         c.Element("Y").Value descending,
         c.Element("Z").Value descending
    select new
    {
        name1 = (string)c.Element("NAME"),
        X1 = (string)c.Element("X"),
        Y1 = (string)c.Element("Y"),
        Z1 = (string)c.Element("Z")
    };
    foreach (var r in sortedElements)
    Console.WriteLine("X:{0} Y:{1} Z:{2} Name:{3}",
           r.X1, r.Y1, r.Z1, r.name1);              
以及向XML文件添加根元素

<BLOCKS>
  <BLOCK>
   <NAME>B1</NAME>
   <X>0</X>
   <Y>0</Y>
   <Z>0</Z>
  </BLOCK>
</BLOCKS>
<root>

    <BLOCKS> . . . </BLOCKS>

</root>

. . . 

我不是LINQ专业人士,但您是否尝试过使用子体而不是元素?在哪一行引发异常?如果它在您的foreach循环中,您只需检查(r!=null){console.writeln…}我也尝试了子体,但它不起作用,仍然是相同的错误。var sortedElements似乎正在引发nullreference异常。XElement没有根。只有XDocument有。我认为否决票有点苛刻——答案是正确的。块是当前元素;一个简单的用词不当。我们不知道顶层元素是什么。问题中没有这些信息所以。。。实际的问题是什么?例如,当指向c.Element(“X”)时,发现它不是指向元素内部的值,而是指向元素的位置,这就是我在网上发现的。