是否可以将扩展方法嵌套在另一个扩展方法中?
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")
假设我想为 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")