#c# #visual-studio #linq #visual-studio-2015
#c# #visual-studio #linq #visual-studio-2015
Вопрос:
ошибка CS1061: ‘ICollection<>’ не содержит определения для ‘SelectMany’ и не удалось найти метод расширения ‘SelectMany’, принимающий первый аргумент типа ‘ICollection<>’ (вам не хватает директивы using или ссылки на сборку?)
Visual Studio 2015 поддерживает вычисление лямбда-выражений linq в режиме отладки в немедленном окне. Я протестировал его с помощью консольного приложения, в котором я извлекаю Process.GetProcesses()
, перехожу к немедленному окну и начинаю писать .Select
или .Where
на нем. Все работает нормально.
Однако я не могу сделать то же самое в своем проекте.
Моя точка останова находится в этой строке:
return Dimensions.Values.SelectMany(dimension => dimension.Attributes)
.FirstOrDefault(dimensionAttribute => key.Equals(dimensionAttribute.Key));
Выполнение F10 работает. Однако, когда я пытаюсь запустить это же выражение по частям, в немедленном окне, т.е. Dimensions.Values.SelectMany(dimension => dimension.Attributes)
Я получаю вышеупомянутую ошибку.
Я пытаюсь неправильно оценить это? Чего мне не хватает?
Комментарии:
1. Просто чтобы быть уверенным.. Вы уверены, что у вас есть
using Systen.Linq
?2. Используете ли вы System.Linq?
3. @GiladGreen, @mww, да, я использую
System.Linq
. Я должен сказать вам, что это снаружиnamespace {}
и поверх него. Я упомянул об этом, потому что хотел явно указать, что его нет внутриnamespace {}
. Кроме того, работает F10.4. попробуйте включить
System.Data.Entity
ссылку на dll в свой проект, возможно, это решит вашу проблему!5. Странно, это работает сегодня!! Не уверен в прерывистом поведении.
Ответ №1:
Я не могу назвать вам причину, по которой это происходит (у меня похожие проблемы с немедленным окном), но я обнаружил, что вы можете вызывать методы расширения через статический доступ к классу. В вашем случае это было бы:
Enumerable.FirstOrDefault(Enumerable.SelectMany(Dimensions.Values, dimension => dimension.Attributes),dimensionAttribute => key.Equals(dimensionAttribute.Key));
Комментарии:
1. Черт возьми, это потрясающе и хакерски. Мне это нравится.
2. Спасибо @Lennart, это работает! Мне нужно было что-то подобное для немедленной цели, я могу пройти немного дольше. Но я не могу принять это как ответ на конкретный вопрос, который я задал. Причина, по которой мы используем методы расширения, заключается в том, что мы можем связать их в цепочку. Было ли так, что он должен был работать в немедленном окне vs 2015?
3. @singsuyash Имейте в виду, что вы можете вызывать разные методы расширения. Реальным кодом может быть an
IQueryable<T>
, который имеет другие методы расширения.