【问题标题】:Invalid Types in VB.NETVB.NET 中的无效类型
【发布时间】:2011-05-07 15:05:33
【问题描述】:

我有一个函数可以返回一个产品列表和一个显示的页面,但是当我尝试在页面上加载列表时,我得到一个神秘的错误:

[A]System.Collections.Generic.List`1[Product] cannot be cast to
[B]System.Collections.Generic.List`1[Product].
Type A originates from 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
in the context 'LoadNeither' at location 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'.
Type B originates from 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
in the context 'LoadNeither' at location 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'.

对我来说,这两种类型看起来是一样的。抛出异常就行了:

Dim products As List(Of Product) = AppDAL.FindProducts(New ProductSearchEventArgs(SearchText, ProductSearchEventArgs.TextCriteria.Contains))

我的方法的签名是:

Public Shared Function FindProducts(e As ProductSearchEventArgs) As List(Of Product)

Product、调用 FindProducts 方法的页面或 AppDAL 类都没有命名空间,我不知道为什么这不起作用

【问题讨论】:

  • 您是否尝试过重建项目并重新启动 Visual Studio?

标签: .net vb.net covariance ctype


【解决方案1】:

我怀疑问题是您有两个单独的Product 定义,可能是通过在项目之间复制类文件;这还不够,因为类型是由它们的程序集定义的。您需要项目之间的引用,因此它们都使用相同的类型。

【讨论】:

  • 或者您的应用中可能引用了与 DAL 不同版本的 dll,这也可能导致此错误。
  • @Pondidum - 通常仅在使用 GAC 时适用;这是可能的,但根据我的经验,课堂复制更常见
【解决方案2】:

虽然您可能不会在代码中设置命名空间,但 VB 在项目属性中始终具有默认命名空间名称。你试过Dim products As List(Of AppDAL.Product) =吗?

【讨论】:

  • 有趣。添加命名空间解决了这个问题。
【解决方案3】:

我遇到了类似的问题;经过很多挫折之后,它在重新启动 VS、强制完全获取(如果您使用源代码控制)并进行完全重建后消失了。我不知道这对你的情况是否有帮助。

【讨论】:

  • 但它发生在生产中吗?然后呢?
猜你喜欢
  • 2021-05-14
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
相关资源
最近更新 更多