2017-01-30 5 views
0

Скажем, я хочу написать метод расширения для 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 в качестве параметра.

ответ

2

Невозможно сделать это напрямую. Если поддерживалось расширение свойства, вы можете получить это для работы, но поскольку метод расширения предназначен для HtmlHelper, имя метода должно поступать непосредственно после ссылки HtmlHelper (в данном случае это свойство Html).

Обратите внимание, что вы можете группировать сами методы в пространствах имен и/или классов:

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") 
Смежные вопросы