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

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

String s = "asdf";
s.

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

3 ответа

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

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

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

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

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


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


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

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

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

licensed under cc by-sa 3.0 with attribution.