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

StackOverflow https://stackoverflow.com/questions/345883

Вопрос

Поскольку 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){
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top