我有以下代码:
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
为空?
答案 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;