【问题标题】:Is it possible to nest an extension method inside another one?是否可以将扩展方法嵌套在另一个方法中?
【发布时间】:2017-06-15 04:38:32
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net extension-methods


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 2010-12-24
      • 2016-03-11
      相关资源
      最近更新 更多