C# 这比再锋利的机器人更锋利吗?
Resharper(当然,经我同意)更改了以下内容: ……在这方面:C# 这比再锋利的机器人更锋利吗?,c#,resharper,null-check,C#,Resharper,Null Check,Resharper(当然,经我同意)更改了以下内容: ……在这方面: private static Subdepartment GetSubdepartmentForXMLElement(XElement subdept) { var xElement = subdept.Element("Id"); if (xElement != null) { var element = subdept.Element("AccountId"); if
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
};
这:
。。。甚至不编译<未声明代码>元素、元素
和元素
但是,resharper不应对此抱怨:
private static Subdepartment GetSubdepartmentForXmlElement(XElement subdept)
{
if (subdept == null) throw new ArgumentNullException("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;
}
Resharper代码更正一次只适用于一个问题,这就是为什么您最终会在OP中遇到嵌套的混乱。如果您从一开始就仔细编写代码,您将需要更少地执行这些一个问题的修复
就我个人而言,我更喜欢减少嵌套,并希望这一点更好:
private static Subdepartment GetSubdepartmentForXmlElement(XElement subdept)
{
if (subdept == null) throw new ArgumentNullException("subdept");
var idElement = subdept.Element("Id");
var accountIdElement = subdept.Element("AccountId");
var nameElement = subdept.Element("Name");
if (idElement == null || accountIdElement == null || nameElement == null)
return null;
return new Subdepartment
{
Id = Convert.ToInt32(idElement.Value),
AccountId = Convert.ToDouble(accountIdElement.Value),
Name = nameElement.Value
};
}
ReSharper也不会对此抱怨。这:
。。。甚至不编译<未声明代码>元素、元素
和元素
但是,resharper不应对此抱怨:
private static Subdepartment GetSubdepartmentForXmlElement(XElement subdept)
{
if (subdept == null) throw new ArgumentNullException("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;
}
Resharper代码更正一次只适用于一个问题,这就是为什么您最终会在OP中遇到嵌套的混乱。如果您从一开始就仔细编写代码,您将需要更少地执行这些一个问题的修复
就我个人而言,我更喜欢减少嵌套,并希望这一点更好:
private static Subdepartment GetSubdepartmentForXmlElement(XElement subdept)
{
if (subdept == null) throw new ArgumentNullException("subdept");
var idElement = subdept.Element("Id");
var accountIdElement = subdept.Element("AccountId");
var nameElement = subdept.Element("Name");
if (idElement == null || accountIdElement == null || nameElement == null)
return null;
return new Subdepartment
{
Id = Convert.ToInt32(idElement.Value),
AccountId = Convert.ToDouble(accountIdElement.Value),
Name = nameElement.Value
};
}
ReSharper也不会对此抱怨。当
subdept
为空时会发生什么NullReferenceException
那么为什么超级挑剔的R#不能解释这一点呢?或者我应该问,也许是非常谨慎(不是坏事)。谁知道呢,应该如此。看起来您的计算机上或解决方案/项目上都有自定义设置。它还应该抱怨本地方法变量的名称(应该是camelCase
,而不是PascalCase
)。当subdept
为空时会发生什么NullReferenceException
那么为什么超级挑剔的R#不能解释这一点呢?或者我应该问,也许是非常谨慎(不是坏事)。谁知道呢,应该如此。看起来您的计算机上或解决方案/项目上都有自定义设置。它还应该抱怨本地方法变量的名称(应该是camelCase
,而不是PascalCase
)。