2010-10-22 47 views
2

在C#中有可能转换为List<T> - 所以,如果您有:铸造到列表(Of T)已在VB.NET

List<Activity> _Activities; 
List<T> _list; 

下面的工作:

_list = _Activities as List<T>; 

但翻译与VB.NET一致:

_list = TryCast(_Activities, List(Of T)) 

抛出一个编译错误。所以我有一个很好的寻找,并尝试用LINQ找到一个方法,无济于事。任何想法的人?

感谢

克里斯宾

+0

你有一个奇怪的定义“将工作”。如果实际上有一个名为'T'的类,它可能会编译,但它会在运行时抛出一个'InvalidCastException'。 – 2010-10-23 00:14:23

+0

我刚从Julie Lerman的实体框架书中摘录了一段,所以我认为她已经成功了。尽管我可以阅读很多C#,但还是有一些对我来说还不熟悉的构造。 – CrispinH 2010-10-23 10:34:38

回答

4

我重播,这应该在技术上是可能的。显然,编译器不同意。解决方法很简单,但:

Dim _Activities As New List(Of Activity) 
    Dim o As Object = _Activities 
    Dim tlist = TryCast(o, List(Of T)) 

或者作为一个班轮:

Dim tlist = TryCast(CObj(_Activities), List(Of T)) 

JIT编译器应该优化临时离开,因此没有任何费用。

+0

仅仅抛出一个'InvalidCastException'会不会更容易? – 2010-10-23 00:13:17

+0

这似乎已经成功了。我通过Julie Lerman的实体框架书,并且在运行代码之前还有一些工作要做。 – CrispinH 2010-10-23 10:32:44

+0

汉斯!感谢您的修复。我能够修复这种方法,并推动其他一些转换怪异的东西,即VB转换应用程序无法解决的问题,并让VB解决方案完全适用于第26章。它可以在http://learnentityframework.com/LearnEntityFramework/downloads/#2ed上找到 – 2013-02-06 16:13:36

0

我总是用DirectCast(object, type)

1

您可以使用通用的List.ConvertAll方法。

给定一个列表,该方法将使用您提供的转换器函数返回一个不同类型的列表。

我链接的MSDN文章有一个很好的例子。