XElement为Null时的异常处理:如何让ignorete返回Null?
解决空引用异常,让ignorete在te为Null时也为Null
我来帮你搞定这个空引用的问题~你遇到的错误是因为当te为null时,你直接去访问te.FirstAttribute.Value.ToString(),而null对象没有任何成员,自然会抛出异常。要实现当te为null时ignorete也为null,可以用两种方式处理:
方法一:显式判断te是否为Null(直观易懂)
先检查te是否为null,如果是就直接给ignorete赋值null;否则再执行后续的查询逻辑。另外注意你原代码里的一个小语法错误:判断条件里的=应该改成==哦。
var te = doc.Descendants("TESTID").FirstOrDefault(x => (string)x.Attribute("TESTIDNumber") == finalstr); var ignorete = te == null ? null : doc.Descendants("IgnoreTESTID").FirstOrDefault(x => (string)x.Attribute("TESTIDNumber") == te.FirstAttribute.Value.ToString());
方法二:使用空条件运算符(简洁优雅)
利用C#的空条件运算符?.,它会在左侧对象为null时直接返回null,不会继续访问后续成员,从根源上避免空引用:
var te = doc.Descendants("TESTID").FirstOrDefault(x => (string)x.Attribute("TESTIDNumber") == finalstr); var ignorete = te?.FirstAttribute?.Value != null ? doc.Descendants("IgnoreTESTID").FirstOrDefault(x => (string)x.Attribute("TESTIDNumber") == te.FirstAttribute.Value.ToString()) : null;
另外补充一点:如果你原代码中ignorete是要获取单个匹配的元素,记得加上FirstOrDefault()(就像上面代码里那样),否则返回的是IEnumerable<T>类型,即使没有匹配项也不会是null,而是空的集合。
内容的提问来源于stack exchange,提问作者user726720
相关产品推荐
相关产品推荐

