Даже когда я ношу подтяжки, 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 # признал, что я сделал это?
Вы можете использовать явное преобразование вместо доступа к свойству Value
return new ItemGroup
{
Id = (int)itemGroup.Element("Id"),
item_group_id = (string)itemGroup.Element("item_group_id"),
name = (string)itemGroup.Element("name")
};
itemGroup
может быть нулевым?