【问题标题】:Cannot convert type 'System.Collections.Generic.List<website.Class1>' to 'System.Collections.Generic.List<library.Class1>'无法将类型“System.Collections.Generic.List<website.Class1>”转换为“System.Collections.Generic.List<library.Class1>”
【发布时间】:2015-06-03 07:19:34
【问题描述】:

我在 .net 4.5 上使用 MVC。

我已将模型从网站分离到一个类库中,并将 .edmx 的 tt 类文件复制到我的网站,以便我可以访问模型类。

虽然当我像这样从库中返回一些数据时,

List<website.Class1> a = objLibraryRef.GetFileLists1();

我收到此错误。

Cannot convert type 'System.Collections.Generic.List<website.Class1>'
to 'System.Collections.Generic.List<library.Class1>'

我不想引用类库来访问模型类。

任何帮助将不胜感激。 谢谢和干杯。

【问题讨论】:

  • 我猜objLibraryRef.GetFileLists1() 重新运行System.Collections.Generic.List&lt;library.Class1&gt;
  • 方法的返回类型是什么?应该是List&lt;website.Class1&gt;
  • 没有。是List&lt;library.Class1&gt;,怎么会是List&lt;website.Class1&gt;
  • 是的。这是@AlexeyNis

标签: c# asp.net-mvc asp.net-mvc-4 generics edmx


【解决方案1】:

您的 DAL 方法返回 List&lt;T&gt; 类型为 Class1,它位于 library 命名空间中,而您将其分配给 Class1 类型,但它的命名空间不同,即 website1 而不是 library

您可以使用隐式类型变量来推断 DAL 库方法返回的类型:

var list = objLibraryRef.GetFileLists1();

或者,如果您真的想要website.Class1 类型的列表,那么您必须按照@adricadar 在他的帖子中建议的那样再次在列表上进行投影。

【讨论】:

  • 是的,没错。但是我复制了 tt 文件,所以我的 class1 定义在网站和服务中都匹配,仍然显示错误
  • 你是对的,但是命名空间不同,所以你不能直接分配它
  • 好的,如果我把它当作var,我可以用它来做模型绑定到我的视图吗?
  • 你可以在视图中绑定,如果你的模型是List&lt;library.Class1&gt;而不是List&lt;website.Class1&gt;
  • 意味着我必须参考 library 的模型类或列表中的项目,如 adricadar 建议的?
【解决方案2】:

您必须将library.Class1 转换为website.Class1。即使它们具有相同的名称,这些类也是不同的,因为它们位于不同的库中。

List<website.Class1> a = objLibraryRef.GetFileLists1()
                         .Select(c => new website.Class1 {
                                   property1 = c.property1,
                                   ...
                                   propertyN = c.propertyN
                          }).ToList();

注意:property1..N 替换为您的属性(即Name)。为此,您不必参考创建library.Class1 的库。

【讨论】:

  • @JenishRabadiya OP 不想添加对library.Class1 的引用。在一个你没有包含它的库的类上创建一个Select 是可能的:)。
  • @JenishRabadiya 你真的让我觉得这行不通,所以我做了一个项目并对其进行了测试,结果:完美无瑕
  • 谢谢,效果很好,只是想知道它是否有任何处理开销或性能问题?
  • @PravinDeshmukh 这有一个复杂性O(n),因为它将遍历所有项目。性能实际上取决于项目的数量,此外,性能还有其他好处。但是,如果您在映射之前过滤它们 (objLibraryRef.GetFileLists1().Where(someCondition)),您可以节省一些时间。
【解决方案3】:

您可以使用AutoMapper 映射这两个对象。即使您的定义匹配,它们也是两个不同的类,您不能直接转换它们。 Here 是如何映射列表的示例。

【讨论】:

  • 这个很好解决,过段时间我试试。
猜你喜欢
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
  • 2019-01-03
  • 1970-01-01
相关资源
最近更新 更多