Почему 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){
}
Тогда он должен быть там.