C# 嵌套的If语句不起作用
我最近刚刚发布了一篇关于让XMLTextReader工作的文章,我终于做到了。不幸的是,现在我无法让它从XML文件中获取数据,因为我的if语句有问题。我需要在另一个if语句中包含这些if语句,因为它们需要首先创建Student类。我不知道该怎么做了。下面是我的代码,我相信这是愚蠢的。我不是一个好的编码,所以我知道这是我错过的东西C# 嵌套的If语句不起作用,c#,if-statement,xmltextreader,C#,If Statement,Xmltextreader,我最近刚刚发布了一篇关于让XMLTextReader工作的文章,我终于做到了。不幸的是,现在我无法让它从XML文件中获取数据,因为我的if语句有问题。我需要在另一个if语句中包含这些if语句,因为它们需要首先创建Student类。我不知道该怎么做了。下面是我的代码,我相信这是愚蠢的。我不是一个好的编码,所以我知道这是我错过的东西 while (reader.Read()) { reader.MoveToContent(); if
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))..
如果这不起作用,请尝试使用simpleXmlDocument
并查看它是否起作用,如果不起作用,我会说代码中的其他内容是错误的,从提供的代码中看不到
使用XmlDocument
的简单示例如下:
它仍然跳过所有的if语句,只设置Student
平均值并将其添加到列表中
我想的第一件事是字符串上的相等失败,所以首先要尝试的是
if (reader.Name.Equals("id",StringComparison.InvariantCultureIgnoreCase))..
如果这不起作用,请尝试使用simpleXmlDocument
并查看它是否起作用,如果不起作用,我会说代码中的其他内容是错误的,从提供的代码中看不到
使用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()