3

リリースされたばかりのバージョンの Resharper (2016.2.2) を使用して、ソリューションを再調整中です。

次のコード行にフラグを立てます。

ReportRunnerConstsAndUtils.ConvertValueToAppropriateTypeAndAssign(totalPackagesCell, packages);

...「拡張メソッドとして呼び出す」必要があることをほのめかします

同意すると、その行が次のように変更されます。

totalPackagesCell.ConvertValueToAppropriateTypeAndAssign(packages);

これは良いですか?もしそうなら、どのように?なぜ?

「ConstsAndUtils」クラスにある、呼び出されるメソッドは次のとおりです。

// Adapted from https://stackoverflow.com/questions/26483496/is-it-possible-to-ignore-excel-warnings-when-generating-spreadsheets-using-epplu
public static void ConvertValueToAppropriateTypeAndAssign(this ExcelRangeBase range, object value)
{
    string strVal = value.ToString();
    if (!String.IsNullOrEmpty(strVal))
    {
        decimal decVal;
        double dVal;
        int iVal;

        if (decimal.TryParse(strVal, out decVal))
            range.Value = decVal;
        if (double.TryParse(strVal, out dVal))
            range.Value = dVal;
        else if (Int32.TryParse(strVal, out iVal))
            range.Value = iVal;
        else
            range.Value = strVal;
    }
    else
        range.Value = null;
}
4

3 に答える 3

4

一部のコメントが示しているように、これは少なくとも部分的には好みの問題です。個人的には、ここで拡張メソッドを使用する方が「よりクリーン」で明確だと思いますが、これに反対する人もいるかもしれません。

もちろん、「内部では」、拡張メソッドは静的メソッドです (実際のインスタンス メソッドではありません)。これは、コンパイラがここで構文糖衣を提供しているだけです (ただし、それは重要ではありません)。

于 2016-09-13T16:21:51.613 に答える
1

これは意見に基づく質問であるため、実際には答えられませんが、次のことを指摘したいと思います。

voidこの特定のケースでは、単純にメソッドが;を返すため、拡張メソッドは使用しません。何かを返さず、単に副作用を引き起こすメソッドは、拡張メソッドの候補として適切ではなく、標準の静的メソッド呼び出しとして読みやすいと思います。

私は拡張メソッドを可能な限り「純粋」に保つようにしていますが、前述したように、これは私の個人的な意見です。

考えてみれば、拡張メソッドは、C# の非常に機能的な側面である LINQ を可能にするために実装されました。私は、実装するすべての拡張メソッドで同じ「感覚」を維持する傾向があります。

于 2016-09-13T16:32:05.913 に答える