2014-01-20 3 views
2

Я пытаюсь определить, существует ли атрибут узла XML. Вот мой код:Resharper говорит, что это выражение всегда верно. Зачем?

var xmlNode = element.Attributes("parent"); 
if (xmlNode != null) // Expression is always true 
{ 
    var parentNodeId = element.Attribute("parent").Value; 
    if (groupables.ContainsKey(parentNodeId)) 
    { 
     parent = groupables[parentNodeId]; 
    } 
} 

Resharper говорит мне, что линия, где я могу проверить, если XMLnode равно нулю будет alays быть правдой. Почему это? Я разбираю XML-файл, некоторые из узлов содержат «родительский» атрибут. Некоторые этого не делают. Так почему же Решарпер думает иначе?

+0

Иногда ReSharper терпит неудачу –

+8

@SriramSakthivel: Не в этом случае ;-) –

ответ

18

Поскольку Attributes будет возвращать список 0-длину, которая никогда не является нулевым

+0

Итак, мой код, как написано, не будет работать? – Kevin

+5

Правильно, поэтому OP должен проверять свойство 'Count', чтобы определить, присутствует ли этот атрибут или нет, или использовать атрибут (единственное) и проверять значение null. Я бы выполнил нулевую проверку в единственной форме, поэтому вам не нужно дважды обращаться к атрибуту. – vcsjones

+3

Ищите 'if (xmlNode.Any()) вместо – DaveDev

Смежные вопросы