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

时间:2017-01-30 04:03:41

标签: c# asp.net extension-methods

说我想为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作为参数。

1 个答案:

答案 0 :(得分:2)

没有办法直接这样做。如果支持扩展属性,则可以使其工作,但由于扩展方法适用于HtmlHelper,因此方法名称必须直接在HtmlHelper引用之后(在此case Html property。。

请注意,您可以在名称空间和/或类中对方法本身进行分组:

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")