System.Collections.Generic.IEnumerable' 不包含“ToList”的任何定义

Posted

技术标签:

【中文标题】System.Collections.Generic.IEnumerable\' 不包含“ToList”的任何定义【英文标题】:System.Collections.Generic.IEnumerable' does not contain any definition for 'ToList'System.Collections.Generic.IEnumerable' 不包含“ToList”的任何定义 【发布时间】:2013-03-26 15:04:24 【问题描述】:

这就是问题所在。我从 ViewPage 获取 IEnumerable ,当我尝试将它转换为 List 时,它向我显示如下错误:

'System.Collections.Generic.IEnumerable<Pax_Detail>'不包含 'ToList' 的定义并且没有扩展方法 'ToList' 接受 类型的第一个参数 'System.Collections.Generic.IEnumerable<Pax_Detail>' 可以找到 (您是否缺少 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吗? 附带说明,在使用pax.ToList() 覆盖下一行时避免= new List&lt;Pax_Detail&gt;(),因为未使用的内存是通过这种方式分配的 【参考方案1】:

在我的例子中,我从另一个使用 Automapper 的项目中复制了一些代码 - 我花了很长时间才解决这个问题。只需将 automapper nuget 包添加到项目中。

【讨论】:

【参考方案2】:

我缺少 System.Data.Entity dll 引用,问题已解决

【讨论】:

【参考方案3】:

添加 LINQ 的替代方法是使用以下代码:

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

【讨论】:

如果您在调试缺少指令的文件时尝试在即时窗口中执行此操作,则非常有用。 当我尝试这个时,pax 的任何变化也会反映在 paxList 中!【参考方案4】:

您缺少对 System.Linq 的引用。

添加

using System.Linq

访问当前代码文件中的 ToList() 函数。


为了说明为什么这是必要的,Enumerable.ToList&lt;TSource&gt; 是一种扩展方法。扩展方法是在它所针对的原始类之外定义的。在这种情况下,扩展方法是在System.Linq 命名空间上定义的。

【讨论】:

【参考方案5】:

您是否缺少 System.Linq 的 using 指令?

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

【讨论】:

哦,谢谢。我没有在我的项目中使用 Linq,但我认为在这种情况下需要它。 我建议使用 resharper。它非常擅长发现这样的事情,并会提示您添加 using 指令。 @AndyNichols 该功能已经隐含在 Visual Studio 中。也许不是在 2013 年 :)

以上是关于System.Collections.Generic.IEnumerable' 不包含“ToList”的任何定义的主要内容,如果未能解决你的问题,请参考以下文章