Почему VS 2008 не отображает методы расширения в Intellisense для класса String
-
19-08-2019 - |
Вопрос
Поскольку String реализует IEnumerable<char>
, я ожидал увидеть методы расширения Enumerable в Intellisense, например, при вводе точки в
String s = "asdf";
s.
Я ожидал увидеть .Select<char>(...)
, .ToList<char>()
и т. д.
Затем я был удивлен, увидев, что методы расширения do на самом деле работают со строковым классом, они просто не отображаются в Intellisense. Кто-нибудь знает, почему это?
Это может быть связано с этим вопрос.
Решение
Это явный дизайн. Проблема в том, что хотя String наиболее определенно реализует IEnumerable<T>
, большинство людей не думают об этом или, что более важно, используют его таким образом. Р>
Строка имеет довольно небольшое количество методов. Изначально мы не отфильтровывали методы расширения от String, и в результате мы получили много отрицательных отзывов. Это почти утроило число методов с правильным импортом. При отображении всех методов расширения люди часто не могли увидеть метод String, который они искали в шуме. Р>
String - это ... простой тип, и его лучше просматривать таким образом:)
По-прежнему полностью возможно вызвать метод расширения для строки. Это просто, вероятно, не будет отображаться в intellisense. Р>
РЕДАКТИРОВАТЬ: String на самом деле имеет довольно много методов. Но из-за того, что многие из них являются перегрузками, они теряют смысл. Р>
Другие советы
Для информации, это изменилось в VS2010 (по крайней мере, в бета-версии 2). Похоже, эта фильтрация была удалена (возможно, это вызвало слишком много путаницы), и теперь методы видны вместе с глифом метода расширения.
Должен.
For example you can write it public static string myExtensionMethod(this String yuppi){
}
Тогда это должно быть там.