Подтвердить что ты не робот

Можно ли вызывать методы расширения из немедленного окна

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

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

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

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

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

4b9b3361

Ответ 1

Это поведение вызвано "Контракты кода" и не ограничивается только окном Immediate, а также окном условных точек останова.

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

Ответ 2

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

Ответ 3

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

Добавить

using System.Linq;

в вашем коде.

Пример с Visual Studio 2010:

enter image description here

Впервые с System.Linq импортировано, а затем using System.LINQ.

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

Ответ 4

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

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

Ответ 5

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

myList.Tolist();

To:

Enumerable.ToList(myList);

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