LINQ to XML - как мне получить индекс - PullRequest
2 голосов
/ 20 сентября 2010

У меня есть массив объектов Car и, используя следующий фрагмент кода, я создаю XML-документ из этих объектов.Я установил переменную-счетчик i, чтобы можно было индексировать элементы Car в документе.Есть ли другой способ получения индекса обрабатываемого в данный момент элемента?

        int i = 0;
        XDocument doc =
            new XDocument(
                new XElement(
                    "Inventory",
                    from car in cars
                    select
                        new XElement("Car",
                            new XAttribute("ID", ++i), //<<== index here
                            new XElement("Color", car.Color),
                            new XElement("Make", car.Make),
                            new XElement("PetName", car.PetName)
                        )
                )
            );

Подход, который я выбрал, работает отлично, мне просто интересно, есть ли волшебное слово или метод расширения, который даст индекс безмой инкремент переменной счетчика?

Ответы [ 2 ]

4 голосов
/ 20 сентября 2010

Да - не используйте выражение запроса;используйте перегрузку Select, которая обеспечивает индекс .Это заменит выражение вашего запроса:

cars.Select((car, index) =>
    new XElement("Car",
        new XAttribute("ID", index),
        new XElement("Color", car.Color),
        new XElement("Make", car.Make),
        new XElement("PetName", car.PetName)
    ))

Существуют различные перегрузки, которые не поддерживаются в выражениях запросов - определенно стоит ознакомиться с «точечной нотацией» (или как вы хотите ее называть) и запросомвыражения.

2 голосов
/ 20 сентября 2010

Существует перегрузка для Select, которая принимает индекс , поэтому вы можете изменить выражение запроса на следующее:

cars.Select((c, i) => new XElement("Car", new XAttribute("ID", i) ...))
...