Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这比再锋利的机器人更锋利吗?_C#_Resharper_Null Check - Fatal编程技术网

C# 这比再锋利的机器人更锋利吗?

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

Resharper(当然,经我同意)更改了以下内容:

……在这方面:

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
)。