2010-05-18 16 views
5

Bir xml özniteliğinin olup olmadığını sınamak istiyorum. Bu göz önüne alındığında:Neden bir null dönüşü sınanabilir, ancak başka bir istisna atar?

XmlAttributeCollection PG_attrColl = SomeNodeorAnother.Attributes; 

Bu ilk test çalışır:

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

"GetNamedItem" boş dönmek gerekiyordu, ama aşağıdaki test döndürür boş şikayetçi bir istisna atar edilir.

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

Neden fark? Sadece merak.

cevap

4

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

Eğer Özellik sen Değer olmadığını görmek için kontrol ediyoruz İşte

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

boş olup olmadığını görmek için kontrol ediyoruz özniteliği boş. Kod, ilk özelliğe erişmeye çalışıyor, bu null, bir istisna atıyor.

+0

Elbette! Duh ... Teşekkürler! – mickeyf

12

GetNamedItem null döndürdüğünden, Value üye için çağrı yapamazsınız.

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

Ya

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

veya çift görünümü önlemek için bir değişkende saklayın. iki şekilde, +1. – falstro

+0

@roe: Kabul et, daha iyi. –

İlgili konular