0

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;

...最後から 2 番目の中括弧の後に、コンパイルできるようにします。

私は 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
};
4

1 に答える 1

4

これ:

private static Subdepartment GetSubdepartmentForXMLElement(XElement subdept)
{
    return new Subdepartment
    {
        Id = Convert.ToInt32(xElement.Value),
        AccountId = Convert.ToDouble(element.Value),
        Name = el.Value
    };
}

...コンパイルさえしません。xElementelement、および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 のコード修正は、一度に 1 つの問題にしか適用されないため、OP でネストされた混乱が発生しました。最初から慎重にコードを記述すれば、これらの 1 つの問題の修正を少なくする必要があります。

個人的にはネストを減らすことを好み、これをもう少し良くしたいと思います:

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 もこれについて文句を言うことはありません。

于 2015-01-09T00:31:02.583 に答える