Почему один пустой указатель может возвратиться быть протестированным, но другой выдает исключение?

Я хочу протестировать, если атрибут XML присутствует. Учитывая это:

XmlAttributeCollection PG_attrColl = SomeNodeorAnother.Attributes;

Этот первый тест работы:

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

"GetNamedItem", как предполагается, возвращает пустой указатель, но следующий тест выдает исключение, жалующееся на пустой указатель, который это возвращает.

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

Почему различие? Просто любопытный.

5
задан Deduplicator 10 February 2015 в 22:38
поделиться

2 ответа

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

Здесь вы проверяете, равен ли атрибут null

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

Здесь вы проверяете, является ли значение атрибута нулевым. Код сначала пытается получить доступ к атрибуту, который имеет значение null, вызывая исключение.

4
ответ дан 18 December 2019 в 10:42
поделиться

Потому что если GetNamedItem вернул null, вы не можете вызвать его Value член.

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

Или

object someAttributeNullable = PG_attrColl.GetNamedItem("SomeAttribute");
if (null != someAttributeNullable)
{
    string value = someAttributeNullable .Value;
}
12
ответ дан 18 December 2019 в 10:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: