2010-05-18 11 views
5

Quiero probar si un atributo xml está presente. Teniendo en cuenta esto:¿Por qué se puede probar un retorno nulo pero otro arroja una excepción?

XmlAttributeCollection PG_attrColl = SomeNodeorAnother.Attributes; 

funciona de esta primera prueba:

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

"GetNamedItem" se supone que devuelve nulo, pero la siguiente prueba se produce una excepción quejándose de la nula que devuelve.

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

¿Por qué la diferencia? Sólo curioso.

Respuesta

4

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

Aquí se está comprobando para ver si el atributo es nulo

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

Aquí se está comprobando para ver si el valor de el atributo es nulo. El código intenta acceder primero al atributo, que es nulo, lanzando una excepción.

+0

¡Por supuesto! Duh ... ¡Gracias! – mickeyf

12

Porque si GetNamedItem ha devuelto nulo, no puede llamar a su miembro Value.

if (null != PG_attrColl["SomeAttribute"]) 
{ 
    string value = PG_attrColl.GetNamedItem("SomeAttribute").Value; 
} 

O

object someAttributeNullable = PG_attrColl.GetNamedItem("SomeAttribute"); 
if (null != someAttributeNullable) 
{ 
    string value = someAttributeNullable .Value; 
} 
+1

o almacenarlo en una variable para evitar la doble búsqueda. de cualquier manera, +1. – falstro

+0

@roe: De acuerdo, es mejor. –

Cuestiones relacionadas