是否可以将扩展方法嵌套在另一个扩展方法中?

Is it possible to nest an extension method inside another one?

假设我想为 HtmlHelper 编写一个扩展方法。我可以很容易地做到这一点,就像这样:

public static string Capitalize(this HtmlHelper helper, string theString)
{
    return theString.toUpper();
}

并用 Html.Capitalize("some stuff") 调用它。

如果我想要一大堆属于某种类型的方法,我希望将它们组合在一起怎么办?例如,使用我们的 Capitalize 函数,也许我希望 Html.StringUtils 成为一个东西,所以我可以像这样调用各种相关方法:

Html.StringUtils.Capitalize("some stuff")
Html.StringUtils.WordsToArray("some stuff")
Html.StringUtils.Reverse("some stuff")
...

有简单的方法吗?我试图避免这样一种情况,即我必须将 StringUtils.Capitalize() 作为自己的函数来执行,该函数将 HtmlHelper 作为参数。

没有办法直接做到这一点。如果扩展 properties 被支持,你可以让它工作,但由于扩展方法是针对 HtmlHelper,方法名称必须紧跟在 HtmlHelper 引用之后(在这种情况下 Html 属性)。

请注意,您可以将方法本身分组到命名空间中 and/or 类:

public static class StringUtils
{
    public static string Capitalize(this HtmlHelper helper, string theString)
    { ...
    }
    public static string WordsToArray(this HtmlHelper helper, string theString)
    { ...
    }
    public static string Reverse(this HtmlHelper helper, string theString)
    { ...
    }
}

但调用它们的语法不会引用:

Html.Capitalize("some stuff")
Html.WordsToArray("some stuff")
Html.Reverse("some stuff")