将字符串与foreach循环中的list元素进行比较C#

时间:2019-01-23 15:25:39

标签: c# list foreach

我反序列化了一个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#编程的初学者,所以我想为实现这一点提供一些帮助

3 个答案:

答案 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);     
        }
    }