Как я могу проверить XElements на нулевые значения способом, который примет Resharper?

1

Даже когда я ношу подтяжки, R # говорит мне, что мне нужен пояс. У меня был такой код:

private static ItemGroup GetItemGroupsForXMLElement(XElement itemGroup)
{
    return new ItemGroup
    {
        Id = Convert.ToInt32(itemGroup.Element("Id").Value),
        item_group_id = itemGroup.Element("item_group_id").Value,
        name = itemGroup.Element("name").Value
    };
}

... что R # жаловался, заявив, что это потенциально катастрофично, и что правящие NRE могут опуститься на мой ноггин; IOW, мне нужно было обуздать их, прежде чем они доберутся до этого момента.

Поэтому я добавил код для проверки элементов данных для nullness и отступления, если они были (null):

private static ItemGroup GetItemGroupsForXMLElement(XElement itemGroup)
{
    var IdElement = itemGroup.Element("Id");
    var item_group_idElement = itemGroup.Element("item_group_id");
    var nameElement = itemGroup.Element("name");
    if ((null == IdElement) || (null == item_group_idElement) || 
        (null == nameElement)) return null;
    return new ItemGroup
    {
        Id = Convert.ToInt32(itemGroup.Element("Id").Value),
        item_group_id = itemGroup.Element("item_group_id").Value,
        name = itemGroup.Element("name").Value
    };
}

... но это все еще не успокаивает R #; Я все еще получаю beaucoup "Возможный" System.NullReferenceException "s. По-видимому, он не видит, что различные элементы уже были проверены на null, и я только добираюсь до блока "return new ItemGroup", если все это хорошо.

Как я могу проверить эти элементы на null так, чтобы R # признал, что я сделал это?

  • 0
    Это жалуется, потому что itemGroup может быть нулевым?
  • 0
    Он предупреждает о том, что каждый элемент может быть нулевым. Selman, решение Алабамы работает.
Теги:
nullreferenceexception
xelement
resharper

1 ответ

4
Лучший ответ

Вы можете использовать явное преобразование вместо доступа к свойству Value

return new ItemGroup
{
    Id = (int)itemGroup.Element("Id"),
    item_group_id = (string)itemGroup.Element("item_group_id"),
    name = (string)itemGroup.Element("name")
};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню