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

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

String s = "asdf";
s.

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

Ответы [ 3 ]

15 голосов
/ 06 декабря 2008

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

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

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

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

РЕДАКТИРОВАТЬ: String на самом деле имеет довольно много методов. Но из-за того, что многие из них являются перегрузками, они теряют смысл.

2 голосов
/ 01 ноября 2009

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

0 голосов
/ 10 декабря 2008

Стоит.

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

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

...