【发布时间】:2017-01-21 07:50:41
【问题描述】:
我正在使用刚刚发布的 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;
}
【问题讨论】:
-
它在我看来确实更干净更清晰。不过,ReSharper 提出了许多偏好类型的建议。如果您不喜欢它,您应该可以在选项中将其关闭。
-
正如 itsme86 所说,这是个人喜好... ReSharper 还可以选择执行反向重构“将扩展方法转换为纯静态”jetbrains.com/resharper/features/…
-
这是基于意见的。没有更好的方法可以做到这一点。大多数人认为扩展方法看起来更干净,但仅此而已。关于您发布的代码,
double.TryParse何时会被成功调用? (顺便说一句,你错过了else)。 -
我想说,如果将静态方法制成扩展方法,那么调用它是有意义的,因为它会产生更简洁的代码。另一方面,如果无论出于何种原因,以这种方式调用没有意义,那么问题可能在于该方法首先不应该是扩展方法。
-
@InBetween:谢谢,但为什么 double.TryParse 有问题?
标签: c# resharper extension-methods resharper-2016