Сравните строку с элементами списка в цикле foreach c # - PullRequest
0 голосов
/ 23 января 2019

Я десериализировал 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 в списке

Некоторое содержимое списка «МАРШРУТЫ»

Теперь я хочу просмотреть этот список, чтобы сравнить строку, заданную в командной строке (OriginSignal), со значением дочернего элемента «ENTRANCESIGNAL» каждого элемента «ROUTE» списка

Я пробовал это:

        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();

Я не знаю, что добавить в МАРШРУТЫ [] в качестве индекса.

Я пытался с XmlData.ROUTES[route], но я получаю ошибку Argument 1: cannot convert from 'XmlData.ROUTES' to 'int'

Я новичок в программировании на c #, поэтому я хотел бы получить некоторую помощь для реализации этого

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Вам не нужно использовать индекс для вашего массива, поскольку вы используете цикл foreach, который создает переменную route со следующим элементом в массиве для каждой итерации цикла.Вам просто нужно использовать вашу переменную:

foreach (var route in XmlData.ROUTES)
{
    if (OriginSignal.Equals(route.ENTRANCESIGNAL));
    {
        Console.WriteLine(route.ID);     
    }
}
0 голосов
/ 23 января 2019

Это следует сделать, если я правильно понял вопрос.Вам не нужно использовать индекс.Foreach в основном перебирает все элементы в XmlData.ROUTES, а маршрут var всегда является текущим элементом.

  foreach (var route in XmlData.ROUTES)
    {
        if (String.Equals(OriginSignal, route.ENTRANCESIGNAL)
        {
            Console.WriteLine(route.ID);     
        }
    }
0 голосов
/ 23 января 2019

Вы используете цикл foreach здесь.foreach не использует индекс, вместо этого он возвращает элемент в коллекции во время каждой итерации.В этом случае переменная route содержит элемент в коллекции во время каждой итерации.Вам нужно сравнить элемент с OriginalSignal.

   foreach (var route in XmlData.ROUTES)
   { 
    if(OriginalSignal.Equals(route.ENTRANCESIGNAL))
    {
    Console.WriteLine(route.ID);  
    }
   }

. Следуйте здесь , чтобы узнать больше о циклах foreach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...