Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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# 嵌套的If语句不起作用_C#_If Statement_Xmltextreader - Fatal编程技术网

C# 嵌套的If语句不起作用

C# 嵌套的If语句不起作用,c#,if-statement,xmltextreader,C#,If Statement,Xmltextreader,我最近刚刚发布了一篇关于让XMLTextReader工作的文章,我终于做到了。不幸的是,现在我无法让它从XML文件中获取数据,因为我的if语句有问题。我需要在另一个if语句中包含这些if语句,因为它们需要首先创建Student类。我不知道该怎么做了。下面是我的代码,我相信这是愚蠢的。我不是一个好的编码,所以我知道这是我错过的东西 while (reader.Read()) { reader.MoveToContent(); if

我最近刚刚发布了一篇关于让XMLTextReader工作的文章,我终于做到了。不幸的是,现在我无法让它从XML文件中获取数据,因为我的if语句有问题。我需要在另一个if语句中包含这些if语句,因为它们需要首先创建Student类。我不知道该怎么做了。下面是我的代码,我相信这是愚蠢的。我不是一个好的编码,所以我知道这是我错过的东西

 while (reader.Read())
    {
        reader.MoveToContent();            

        if (reader.NodeType == XmlNodeType.Element && reader.Name == "student")
        {
            Student s = new Student();

                if (reader.Name == "id")
                {
                    s.ID = reader.ReadString();
                }
                if (reader.Name == "firstname")
                {
                    s.FirstName = reader.ReadString();
                }
                if (reader.Name == "lastname")
                {
                    s.LastName = reader.ReadString();
                }
                if (reader.Name == "score")
                {
                    s.TestScores.Add(Convert.ToInt32(reader.ReadString()));
                }
            s.Average = 6.00;
            Students.Add(s);
        }
    }
[EDIT]即使在我告诉XMLreader使用reader.MoveToCOntent()转到下一行之后;它仍然跳过所有的if语句


我擅长编程,如果有任何新的想法和建议,我将不胜感激。

为了使第一个
if
语句为真,
阅读器。Name
必须是“学生”。任何嵌套的
if
检查
reader.Name
的值是否为“student”以外的任何值都将始终为false。

为了使第一个
if
语句为true,
reader.Name
必须为“student”。任何嵌套的
if
检查
reader.Name
的值是否为“student”以外的任何值都将始终为false

它仍然跳过所有的if语句,只设置Student 平均值并将其添加到列表中

我想的第一件事是字符串上的相等失败,所以首先要尝试的是

 if (reader.Name.Equals("id",StringComparison.InvariantCultureIgnoreCase))..
如果这不起作用,请尝试使用simple
XmlDocument
并查看它是否起作用,如果不起作用,我会说代码中的其他内容是错误的,从提供的代码中看不到

使用
XmlDocument
的简单示例如下:

它仍然跳过所有的if语句,只设置Student 平均值并将其添加到列表中

我想的第一件事是字符串上的相等失败,所以首先要尝试的是

 if (reader.Name.Equals("id",StringComparison.InvariantCultureIgnoreCase))..
如果这不起作用,请尝试使用simple
XmlDocument
并查看它是否起作用,如果不起作用,我会说代码中的其他内容是错误的,从提供的代码中看不到

使用
XmlDocument
的简单示例如下:


除非你上传了一些关于它为什么不工作的错误,否则很难说。语法没有问题。我想说的是在VisualStudio中查看调试错误以获得详细信息。 若你们不理解这个错误,那个么上传它,然后我们可以指导你们

我想你应该试着关闭阅读器。你的阅读器打开了。
在末尾写reader.close()。

除非你上传了一些关于为什么它不工作的错误,否则说起来并不容易。语法没有问题。我想说的是在VisualStudio中查看调试错误以获得详细信息。 若你们不理解这个错误,那个么上传它,然后我们可以指导你们

我想你应该试着关闭阅读器。你的阅读器打开了。
在末尾写reader.close()。

那么什么“不起作用”,它是如何起作用的呢?除非真正的问题可以在标题中总结,否则这应该结束。关于另一个问题,更相关的答案是:不要使用XmlReader(除非您的数据大于100 MB),使用调试器检查第一个if语句是否有效,然后继续下一个。然而,您正在检查if reader.Name==“student”,然后再次检查if reader.Name==“something different”,这似乎很奇怪。那么什么“不起作用”,它怎么不起作用呢?除非真正的问题可以在标题中总结,否则这应该结束。关于另一个问题,更相关的答案是:不要使用XmlReader(除非您的数据大于100 MB),使用调试器检查第一个if语句是否有效,然后继续下一个。然而,您正在检查if reader.Name==“student”,然后再次检查if reader.Name==“something distance”,这似乎很奇怪。非常感谢您的快速响应。唯一的问题是,即使在创建新学生后添加(reader.MoveToContent();)时,它仍然跳过所有if语句,只设置学生平均值并将其添加到列表中。有什么建议吗?
reader.MoveToContent()
如果您已经在内容节点上,则不会向前移动阅读器,因此在第一次
if
检查之后再发出另一个
reader.MoveToContent()
将不会做任何事情。如果要在读卡器已位于内容节点时将其向前移动,则需要发出
Read()
。请记住,
Read()。虽然XmlReader很高效,但可能不值得您为正确使用它而花费时间,特别是因为您没有解析非常大的Xml。如果必须使用XmlReader,请参阅,因为您需要了解每个方法如何影响读取器的当前位置。非常感谢您的快速响应。唯一的问题是,即使在创建新学生后添加(reader.MoveToContent();)时,它仍然跳过所有if语句,只设置学生平均值并将其添加到列表中。有什么建议吗?
reader.MoveToContent()
如果您已经在内容节点上,则不会向前移动阅读器,因此在第一次
if
检查之后再发出另一个
reader.MoveToContent()
将不会做任何事情。如果要在读卡器已位于内容节点时将其向前移动,则需要发出
Read()
。请记住,
Read()