System.Collections.Generic.IEnumerable 'не содержит определения для' ToList '


80

Вот в чем проблема. Я получаю IEnumerable из ViewPage, и когда я попытался преобразовать List, он показал мне ошибку, например:

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

Вот мой код контроллера:

[HttpPost]
public ActionResult Edit_Booking(Booking model, IEnumerable<Pax_Detail> pax)
{
  List<Pax_Detail> paxList = new List<Pax_Detail>();
  paxList = pax.ToList(); //getting error here
  BookingDL.Update_Booking(model, paxList);
  return View();
}

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


Вы ссылались System.Core.dll?
ленивец

7
в качестве примечания: избегайте = new List<Pax_Detail>()перезаписи его в следующей строке с помощью pax.ToList(), потому что неиспользуемая память распределяется таким образом
pascalhein

Ответы:


228

Вам не хватает директивы using для System.Linq?

http://msdn.microsoft.com/en-us/library/bb342261.aspx


ООО Спасибо. Я не использую Linq в своем проекте, но думаю, что в данном случае это необходимо.
Дхвани

4
Я бы порекомендовал использовать resharper. Он отлично умеет замечать подобные вещи и предлагает вам добавить директиву using.
Энди Николс

26

Вам не хватает ссылки на System.Linq.

Добавить

using System.Linq

чтобы получить доступ к функции ToList () в текущем файле кода.


Чтобы дать немного информации о том, почему это необходимо, Enumerable.ToList<TSource>это метод расширения. Методы расширения определены вне исходного класса, на который они нацелены. В этом случае метод расширения определяется в System.Linqпространстве имен.


7

Альтернативой добавлению LINQ было бы использование этого кода:

List<Pax_Detail> paxList = new List<Pax_Detail>(pax);

Очень полезно, если вы пытаетесь сделать это в окне «Немедленное» при отладке файла, в котором отсутствует директива.
Дэн Филд

Когда я пробую это делать, любые изменения в pax отражаются и в paxList!
Мартин


0

В моем случае я скопировал некоторый код из другого проекта, в котором использовался Automapper - мне потребовалось много времени, чтобы разобраться с этим. Просто нужно было добавить в проект пакет nuget automapper.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.