如何以Resharper接受的方式检查XElements的null值?

时间:2015-01-16 00:02:54

标签: c# resharper nullreferenceexception xelement

即使我穿吊带裤,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#;我仍然得到了可能的" System.NullReferenceException" s。显然,它并没有看到各种元素已经被测试为null,而我只能进入"返回新的ItemGroup"代码块如果一切顺利的话。

如何以R#识别出我已经这样做的方式测试这些元素为空?

1 个答案:

答案 0 :(得分:4)

您可以使用显式转换而不是访问Value属性

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