将Extension方法作为静态方法调用 - 好的还是坏的样式?

时间:2014-06-05 19:40:42

标签: c# coding-style extension-methods

对于我正在进行的项目,程序员在Decimalstring上编写了一些通用的扩展方法。

public static class StringExtensions
{
    public decimal ForceStringToDecimalInSomeSpecialWay(this string str)
    {
        // ...Magic...
    }
}

public static class DecimalExtensions
{
     // Similarly useful methods.
}

在我为另一位队友做的代码审查中,我注意到,而不是将扩展方法作为一个扩展方法调用,如下所示:

Decimal foo = someString.ForceStringToDecimalInSomeSpecialWay();

......他们将其作为静态方法调用。

Decimal foo = StringExtensions.ForceStringToDecimalInSomeSpecialWay(someString);

虽然它在语法上是一个真正有效的正确调用,我提问这是否是一种好习惯。

在我看来,如果我们想要使用提供有用工具并将其作为静态方法调用的静态助手类,那就没问题。但是当你故意用一个新方法扩展另一个类型时,调用这个新方法作为静态类的方法有点值得怀疑。

1 个答案:

答案 0 :(得分:3)

Extension methods是语法糖。在编译时,它们将被称为静态方法的其余部分。 (与您的第二个代码段一样)

IMO,最好将它们称为简单方法,如:

 someString.ForceStringToDecimalInSomeSpecialWay();

这样你就可以利用Extension方法的功能,否则就没有必要将它们作为扩展方法放在首位。

想象一下,如果你必须调用LINQ扩展方法,如:

List<int> list = new List<int>() { 1, 3, 4, 5, 5, 5 };
var result = Enumerable.ToList(Enumerable.Where(list, r => r != 5));

看起来只是可怕坏。