我如何以 Resharper 接受的方式检查 XElements 中的空值?

How can I check XElements for null vals in a way that Resharper will accept?

即使我穿吊带裤,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,我需要在他们到达那个点之前控制住他们。

所以我添加了代码来测试数据元素是否为空,如果有则撤回(空):

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 "Possible 'System.NullReferenceException"s。显然,它没有看到各种元素已经过 null 测试,如果一切顺利,我只会到达 "return new ItemGroup" 代码块。

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

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

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