2010-05-18 30 views
5

Tôi muốn kiểm tra xem có thuộc tính xml hay không. Với này:Tại sao có thể trả về null một lần nữa nhưng một trường hợp khác lại có ngoại lệ?

XmlAttributeCollection PG_attrColl = SomeNodeorAnother.Attributes; 

thử nghiệm đầu tiên này hoạt động:

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

"GetNamedItem" có nghĩa vụ phải trả về null, nhưng các thử nghiệm sau ném một ngoại lệ phàn nàn về null nó trả về.

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

Tại sao sự khác biệt? Chỉ tò mò thôi.

Trả lời

4

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

Ở đây bạn đang kiểm tra để xem nếu Thuộc tính là null

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

Ở đây bạn đang kiểm tra để xem nếu giá trị của thuộc tính là null. Mã đang cố gắng truy cập thuộc tính trước tiên, là null, ném một ngoại lệ.

+0

Tất nhiên! Duh ... Cảm ơn! – mickeyf

12

Vì nếu GetNamedItem đã trả về giá trị không, bạn không thể gọi cho thành viên Value của nó.

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

Hoặc

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

hoặc lưu trữ trong một biến để tránh tìm kiếm kép. một trong hai cách, +1. – falstro

+0

@roe: Đồng ý, tốt hơn. –

Các vấn đề liên quan