Можно ли вызывать методы расширения из непосредственного окна - PullRequest
13 голосов
/ 13 января 2012

Я задаю вопрос, потому что всякий раз, когда я пытаюсь вызвать метод расширения из окна Immediate в Visual Studio 2010, я получаю следующую ошибку:

System.Collections.Generic.IEnumerable 'не содержит определения для «ToList» и не может быть найден метод расширения «ToList», принимающий первый аргумент типа «System.Collections.Generic.IEnumerable» (вы пропустили используя директиву или ссылку на сборку?)

Если окно Immediate не поддерживает методы расширения, то почему при вводе моей переменной (типа IEnumerable<QueryFilter>), за которой следует точка, IntelliSense перечисляет все методы расширения?

Нет ничего плохого в том, что я печатаю в окне командной строки, потому что, если я скопирую и вставлю его в файл кода и запустлю, это сработает.

В Visual Studio 2012 одинаковые действия для одного и того же решения работают нормально. Если я переключаюсь обратно на VS2010, и проблема сохраняется.

Ответы [ 5 ]

6 голосов
/ 13 января 2012

Методы расширения являются синтаксическим сахаром. На самом деле они реализованы static с ключевым словом this. Вы можете вызвать любой метод расширения, используя статический метод, который предоставляет метод расширения. Затем вы должны передать объект, который расширяется, в качестве первого параметра.

5 голосов
/ 13 января 2012

Это потому, что пространство имен System.Linq не импортируется в текущий контекст, который вы используете во время отладки.

Добавьте

using System.Linq;

в ваш код.

Пример с Visual Studio 2010 :

enter image description here

Сначала импортируется System.LINQ, затем без using System.LINQ.

EDIT : если пространство имен импортировано, а IntelliSense отображает методы, это может быть ошибкой окна «Немедленное».См. эту запись об ошибке при подключении .

4 голосов
/ 13 января 2012

Методы расширения - это просто статические методы.

Вы должны быть в состоянии использовать, например, System.Linq.Enumerable.ToList()

1 голос
/ 24 января 2012

Такое поведение вызвано Кодовыми контрактами и не ограничивается только окном «Немедленно», но и окном «Условные точки останова».

Обновление 01 марта 2016 г.1006 * Нашел MSDN Вопрос , спрашивающий, почему не работает разрешение типов в моих окнах просмотра.Описанное поведение точно такое же, как у меня при использовании Immediate Window.Причина также связана с CodeContracts и отчет об ошибке был подан в Microsoft Connect.Независимо от того, устранена ли ошибка, не указано.

1 голос
/ 13 января 2012

Метод расширения переводится как «Enumerable.ToList». Компилятор обычно конвертирует

myList.Tolist();

Кому:

Enumerable.ToList(myList);

во время компиляции. Я считаю, что вы можете использовать методы расширения из окна быстрого просмотра, если вы этого хотите.

...