Kirk's answer находится прямо на деньги. Я хотел указать на некоторые проблемы с вашим кодом.
Эта линия излишне подсчитывает все элементы:
var hasMatch = matchingElements.Count() > 0;
Вы можете заменить его Any()
, который завершится рано, как только элемент найден:
var hasMatch = matchingElements.Any();
Далее, удостоверившись, что hasMatch
является true
вы должны позвонить First()
вместо FirstOrDefault()
, так как вы знаете, что он должен иметь значение в этой точке.
Сказав, что вы могли бы на самом деле переписать код следующим образом:
var matchingElement = elements.FirstOrDefault(e => e.Name.LocalName == name);
return (string)matchingElement;
Здесь приведение к string
возвратит значение элемента, если он был найден, в противном случае она будет возвращать null
. Литой используется только в том случае, если это было null
, так как вы не смогли бы использовать matchingElement.Value
, который бы выбросил NullReferenceException
, если элемент не был найден. Вы также должны рассмотреть возможность использования SingleOrDefault
, если вы ожидаете существования только одного элемента.
Интересно - у меня было ощущение, что это может иметь какое-то отношение к пространству имен, я буду исследовать дальше. Благодарю. –