Почему VS 2008 не отображает методы расширения в классе Intellisense для класса String

Так как String реализует IEnumerable<char>, я ожидал увидеть методы расширения Enumerable в Intellisense, например, при вводе периода в

String s = "asdf";
s.

Я ожидал увидеть .Select<char>(...), .ToList<char>() и т.д. Затем я был удивлен, увидев, что методы расширения do фактически работают над классом строк, они просто не отображаются в Intellisense. Кто-нибудь знает, почему это? Это может быть связано с этим вопросом.

Ответы

Ответ 1

Это явным образом. Проблема в том, что, хотя String наиболее определенно реализует IEnumerable<T>, большинство людей не думают об этом или, что более важно, используют его таким образом.

Строка имеет довольно небольшое количество методов. Первоначально мы не отфильтровывали методы расширения String, и в результате получилось много отрицательной обратной связи. Это почти утроило количество методов порой при правильном импорте. При отображении всех методов расширения люди часто не могли видеть метод String, который они искали в шуме.

String является... простым типом, и лучше его просматривать таким образом:)

По-прежнему можно вызвать метод расширения в строке. Вероятно, он не появится в intellisense.

РЕДАКТ: Строка на самом деле имеет довольно много методов. Но поскольку многие из них являются перегрузками, они разрушаются в intellisense.

Ответ 2

Для информации это изменилось в VS2010 (по крайней мере, в бета-версии 2). Похоже, что эта фильтрация была удалена (по-видимому, это вызвало слишком много путаницы), и теперь методы видны вместе с глифом расширения-метода.

Ответ 3

Это должно быть.

For example you can write it public static string myExtensionMethod(this String yuppi){
}

Тогда он должен быть там.