我反序列化了一个xml文件,以便执行一些处理并将结果写入另一个xml文件中,
反序列化:
XmlSerializer deserializer = new XmlSerializer(typeof(Network));
TextReader reader = new StreamReader(@"path\XmlFile.xml");
object obj = deserializer.Deserialize(reader);
Network XmlData = (Network)obj;
reader.Close();
我在列表中获得了xml的“ ROUTES”元素
Some content of the "ROUTES" list
现在,我想浏览此列表,以比较命令行(OriginSignal)上给出的字符串与列表中每个“ ROUTE”元素的子元素“ ENTRANCESIGNAL”的值
我尝试过这个:
string OriginSignal = null;
Console.WriteLine("");
OriginSignal = Console.ReadLine();
foreach (var route in XmlData.ROUTES)
{
if (OriginSignal.Equals(XmlData.ROUTES[].ENTRANCESIGNAL))
{
Console.WriteLine(XmlData.ROUTES[].ID);
}
}
Console.ReadLine();
我不知道要在ROUTES []中添加什么作为索引。
我尝试使用XmlData.ROUTES[route]
,但遇到错误Argument 1: cannot convert from 'XmlData.ROUTES' to 'int'
我是c#编程的初学者,所以我想为实现这一点提供一些帮助
答案 0 :(得分:1)
您在这里使用foreach
循环。 foreach
不使用索引,而是在每次迭代期间返回集合中的元素。在这种情况下,route
变量在每次迭代期间都在集合中包含一个元素。您需要将元素与OriginalSignal
进行比较。
foreach (var route in XmlData.ROUTES)
{
if(OriginalSignal.Equals(route.ENTRANCESIGNAL))
{
Console.WriteLine(route.ID);
}
}
关注here,以了解有关foreach循环的更多信息。
答案 1 :(得分:1)
在使用foreach循环时,不需要为数组使用索引,因为循环的每次迭代都会使用数组中的下一个元素实例化route
变量。您只需要使用变量:
foreach (var route in XmlData.ROUTES)
{
if (OriginSignal.Equals(route.ENTRANCESIGNAL));
{
Console.WriteLine(route.ID);
}
}
答案 2 :(得分:1)
如果我正确理解了这个问题,就应该这样做。 您不必使用索引。 foreach基本上循环遍历XmlData.ROUTES中的所有元素,而var route始终是当前项。
foreach (var route in XmlData.ROUTES)
{
if (String.Equals(OriginSignal, route.ENTRANCESIGNAL)
{
Console.WriteLine(route.ID);
}
}