【发布时间】:2017-04-19 23:03:02
【问题描述】:
如果我问的问题很明显,我提前道歉。我正在从常规的 asp.net 编程切换到 MVC,从 vb 切换到 c#。很好,但我还有很多东西要学。
我收到以下错误
无法将类型 system.collections.generic.list
隐式转换为 system.collections.generic.list 。存在隐式转换(您是否缺少演员表?)
这就是我的控制器中的内容
public ActionResult CityForm()
{
var states= _context.Departamentos.ToList();
var viewModel = new CityFormViewModel
{
City= new City(),
States= states
};
return View();
}
我的 viewModel 如下所示
public IEnumerable<State> States{ get; set; }
public City City{ get; set; }
我查看了其他有类似错误的帖子,但原因似乎与我所拥有的不同。我之前在一个不同的应用程序中使用过这种方法并且效果很好,我在这个应用程序中所做的不同之处在于我添加了一个 ADO.NET 实体数据模型,以与 Telerik 控件一起使用。
我还注意到,在我的其他应用程序中,当我将变量悬停在控制器中时,我收到以下消息(** 之间是我将鼠标悬停在的位置):
States = **states**
(local variable)List<State> states
但如果我将鼠标悬停在应用程序中出现错误的同一位置,我会收到不同的消息
States = **states**
(local variable)List<Models.State> states
如您所见,在 State 前面加上 Models。
我非常感谢我能得到的任何帮助。谢谢。
【问题讨论】:
-
project.models.state不是project.state(它们在不同的程序集中)。您的视图模型属性需要为public IEnumerable<Project.Models.State> States { get; set; }- 与您的查询返回相同(并停止使用var!) -
我认为他使用 var 的方式没有任何问题。如果他没有使用 var,他会得到同样的编译器错误。因为他使用的是 var,所以他必须修复更少的代码。
-
@bit2know 我认为
var的问题在这种情况下很明显:它使查看类型不匹配变得更加困难。 -
到目前为止的问题大致是“为什么不同的类型不同”......而答案“因为它们不同”并不完全清楚......一些澄清为什么你期望在“项目”之间进行静默转换.models.state" 和 "project.state" (这至少可以在一定程度上解释为什么您希望两个列表兼容 - 而且您可能知道它们不能兼容 - stackoverflow.com/questions/5881677/…)
-
@BJMyers 也许。在进行隐式转换时,最好详细说明您使用的类型。但我不认为摆脱 var 会阻止这个问题。就帮助他修复它而言,编译错误消息的作用更大。迟早他会克服这样的小错误,不应该害怕使用
var。第二个 var 非常好。使用new时指定变量类型完全是多余的。
标签: c# asp.net-mvc entity-framework