如何进行空比较以返回假

时间:2019-12-03 14:02:30

标签: c# linq

我正在使用

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

2 个答案:

答案 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。