为什么可以测试一个null返回但是另一个抛出异常?

mic*_*ica 5 c# xml null visual-studio-2008

我想测试是否存在xml属性.鉴于这种:

XmlAttributeCollection PG_attrColl = SomeNodeorAnother.Attributes;
Run Code Online (Sandbox Code Playgroud)

第一次测试工作:

if (null != PG_attrColl["SomeAttribute"])   
Run Code Online (Sandbox Code Playgroud)

"GetNamedItem"应该返回null,但是下面的测试会抛出一个异常,抱怨它返回的null.

if (null != PG_attrColl.GetNamedItem("SomeAttribute").Value;)
Run Code Online (Sandbox Code Playgroud)

为什么不同?只是好奇.

小智 12

因为如果GetNamedItem返回null,则无法调用其Value成员.

if (null != PG_attrColl["SomeAttribute"])
{
    string value = PG_attrColl.GetNamedItem("SomeAttribute").Value;
}
Run Code Online (Sandbox Code Playgroud)

要么

object someAttributeNullable = PG_attrColl.GetNamedItem("SomeAttribute");
if (null != someAttributeNullable)
{
    string value = someAttributeNullable .Value;
}
Run Code Online (Sandbox Code Playgroud)


Gre*_*reg 4

if (null != PG_attrColl["SomeAttribute"])

这里你要检查属性是否为空

if (null != PG_attrColl.GetNamedItem("SomeAttribute").Value;)

在这里,您要检查属性的值是否为空。该代码首先尝试访问该属性,该属性为空,引发异常。