如果XElement变为Null则出错

时间:2018-04-27 08:25:22

标签: c# .net xml

我有以下代码:

var te = doc.Descendants("TESTID").Where(x=> (string)x.Attribute("TESTIDNumber")= finalstr).FirstOrDefault();

te is null的情况下,以下给出了一个例外:

var ignorete = doc.Descendants("IgnoreTESTID").Where(x=> (string)x.Attribute("TESTIDNumber")== te.FirstAttribute.Value.toString();

例外情况是:Object not set to an instance of the Object

如果ignorete变为空,我如何使te为空?

2 个答案:

答案 0 :(得分:2)

你只需要一个保护条款:

public string GetIgnorete()
{
    var te = doc.Descendants("TESTID").Where(x=>  (string)x.Attribute("TESTIDNumber") == finalstr).FirstOrDefault();
    if ( te == null ) return null;
    return doc.Descendants("IgnoreTESTID").Where(x=> (string)x.Attribute("TESTIDNumber") == te.FirstAttribute.Value.toString();
}

或者你可以使用conditional operator

var ignorete = (te == null) ? null : doc.Descendants("IgnoreTESTID").Where( x => etc –

注意:我冒昧地将您的=更改为==。后者是等于运算符,它基于比较产生布尔值。前者是赋值运算符,其结果是赋值的值。

答案 1 :(得分:0)

你不能,因为var必须被实例化,以便C#可以分配一个类型。您无法创建var对象并将其设置为null。

在这种情况下,您需要将其声明为doc.Descendants返回的任何对象类型。我在下面声明为通用object

object ignorete = te != null ? doc.Descendants("IgnoreTESTID").Where(x=> (string)x.Attribute("TESTIDNumber")= te.FirstAttribute.Value.toString()) : null;