Resharper说这种表达总是正确的.为什么?

Kev*_*vin 2 c# xml resharper

我正在尝试确定XML节点属性是否存在.这是我的代码:

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];
    }
}
Run Code Online (Sandbox Code Playgroud)

Resharper告诉我,我检查xmlNode是否为null的行将是真的.这是为什么?我正在解析XML文件,一些节点包含"父"作为属性.有些人没有.那么为什么Resharper不这么认为呢?

Dav*_*Dev 18

因为Attributes将返回一个0长度列表,它永远不会为null

  • 正确,所以OP应检查`Count`属性以检测属性是否存在,或使用`Attribute`(单数)并检查null.我会对单数形式进行空检查,因此您不必两次访问该属性. (5认同)
  • 寻找`if(xmlNode.Any())`代替 (3认同)
  • @binncheol我会在计时器启动时立即启动.再过8分钟. (3认同)