Существует ли более быстрый способ проверки элемента XML в LINQ to XML? - PullRequest
3 голосов
/ 14 января 2010

В настоящее время я использую следующий метод расширения, который я сделал для получения значений элементов, используя LINQ to XML. Он использует Any(), чтобы увидеть, есть ли какие-либо элементы с данным именем, и если они есть, он просто получает значение. В противном случае он возвращает пустую строку. Основное использование этого метода - когда я разбираю XML в объектах C #, поэтому я не хочу, чтобы что-то взрывалось, когда элемента там нет.

У меня есть другие методы расширения для другого типа данных, такие как bool, int и double, и некоторые пользовательские методы для разбора пользовательских строк в перечисления или bools. У меня также есть те же методы для работы с атрибутами.

Есть ли лучший способ сделать это?

/// <summary>
/// If the parent element contains a element of the specified name, it returns the value of that element.
/// </summary>
/// <param name="x">The parent element.</param>
/// <param name="elementName">The name of the child element to check for.</param>
/// <returns>The value of the child element if it exists, or an empty string if it doesn't.</returns>
public static string GetStringFromChildElement(this XElement x, string elementName)
{
    return x.Elements(elementName).Any() ? x.Element(elementName).Value : string.Empty;
}

1 Ответ

4 голосов
/ 14 января 2010

Как насчет:

return ((string) x.Element(elementName)) ?? "";

Другими словами, найдите первый элемент или верните ноль, затем вызовите оператор преобразования строки (который будет возвращать ноль для нулевого ввода) и по умолчанию используйте пустую строку, если результат всего этого равен нулю.

Вы можете разбить это на части без потери эффективности, но главное - нужно искать элемент только один раз.

...