【发布时间】:2015-03-07 05:14:02
【问题描述】:
Resharper 更改了(当然,在我的同意下):
private static Subdepartment GetSubdepartmentForXMLElement(XElement subdept)
{
return new Subdepartment
{
Id = Convert.ToInt32(subdept.Element("Id")),
AccountId = Convert.ToDouble(subdept.Element("AccountId ")),
Name = subdept.Element("Name")
};
}
...进入这个:
private static Subdepartment GetSubdepartmentForXMLElement(XElement subdept)
{
var xElement = subdept.Element("Id");
if (xElement != null)
{
var element = subdept.Element("AccountId");
if (element != null)
{
var el = subdept.Element("Name");
if (el != null)
{
return new Subdepartment
{
Id = Convert.ToInt32(xElement.Value),
AccountId = Convert.ToDouble(element.Value),
Name = el.Value
};
}
}
}
}
...我必须添加:
return null;
...在倒数第二个花括号之后,允许它编译。
我喜欢 R#,但在我看来,上面的代码比一袋烟头丑 9 倍;这不是更好的锐化:
private static Subdepartment GetSubdepartmentForXMLElement(XElement subdept)
{
var IdElement = subdept.Element("Id");
var AccountIdElement = subdept.Element("AccountId");
var NameElement = subdept.Element("Name");
if ((IdElement != null) && (AccountIdElement != null) && (NameElement != null))
{
return new Subdepartment
{
Id = Convert.ToInt32(IdElement.Value),
AccountId = Convert.ToDouble(AccountIdElement.Value),
Name = NameElement.Value
};
}
return null;
}
?
更新
出于某种原因,我实际上更喜欢这种“风格”:
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
};
【问题讨论】:
-
当
subdept为空时会发生什么?NullReferenceException -
那么我想知道,为什么超级挑剔的 R# 没有考虑到这一点?或者也许超级谨慎(不是坏事),我应该问。
-
谁知道,应该。您的机器或解决方案/项目似乎有自定义设置。它也应该抱怨你的本地方法变量的名称(应该是
camelCase,而不是PascalCase)。
标签: c# resharper null-check