这比 Resharper 机器人更锋利吗?
Is this sharper than the Resharper Robots?
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;
}
?
更新
我实际上更喜欢这个 "style" 出于某种原因:
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
};
这个:
private static Subdepartment GetSubdepartmentForXMLElement(XElement subdept)
{
return new Subdepartment
{
Id = Convert.ToInt32(xElement.Value),
AccountId = Convert.ToDouble(element.Value),
Name = el.Value
};
}
...甚至无法编译。 xElement
、element
和 el
未声明。
但是,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)
{
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;
}
?
更新
我实际上更喜欢这个 "style" 出于某种原因:
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
};
这个:
private static Subdepartment GetSubdepartmentForXMLElement(XElement subdept)
{
return new Subdepartment
{
Id = Convert.ToInt32(xElement.Value),
AccountId = Convert.ToDouble(element.Value),
Name = el.Value
};
}
...甚至无法编译。 xElement
、element
和 el
未声明。
但是,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 也不会抱怨这个。