我正在使用
xml1Element = xml1.Elements().SingleOrDefault(
e =>
String.Equals(
(string)e.Attribute("boo"),
(string)xml2Element.Attribute("boo"))
因此,(string)xml2Element.Attribute("boo")
返回null
以及所有其他(string)e.Attribute("boo")
。而且由于null==null
返回了true
,因此我收到了异常:
序列包含多个匹配元素
如何使null==null
返回false
?这样String.Equals(null,null)
是false
。
答案 0 :(得分:5)
你不能。但是您可以使用匿名方法在之前添加null检查:
xml1Element = xml1.Elements().SingleOrDefault(e => {
var a = (string)e.Attribute("boo");
var b = (string)xml2Element.Attribute("boo"));
if(a == null && b == null) return false;
return String.Equals(a, b);
});
(string)xml2Element.Attribute("boo")
总是返回相同的值。一次又一次地查询它可能毫无意义,并降低了性能。只需将其提取到查询之外即可。
答案 1 :(得分:1)
如果要排除空值:
gst-inspect-1.0 --version
gst-inspect-1.0 version 1.14.2
GStreamer 1.14.2
Unknown package origin
您只需要测试xml1Element = xml1.Elements().SingleOrDefault(
e =>
e.Attribute("boo") != null &&
String.Equals(
(string)e.Attribute("boo"),
(string)xml2Element.Attribute("boo"));
的一个属性。因为,如果另一个不为null,我们想返回null
,如果另一个不为null,则它们不相等,并且我们也返回false。如果第一个不为null,但另一个不为null,则它们也不相等,我们返回false。