2010-10-22 14 views
2

En C#, il est possible de jeter à List<T> - donc si vous avez:Coulée à la liste (de T) en VB.NET

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

Ce qui suit fonctionnera:

_list = _Activities as List<T>; 

mais la traduction ligne avec VB.NET qui est:

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

déclenche une erreur de compilation. J'ai donc fait une bonne recherche et expérimenté avec LINQ pour trouver un moyen de contourner cela en vain. Des idées quelqu'un?

Merci

Crispin

+0

Vous avez une définition étrange de "will work". Il peut compiler si vous avez réellement une classe nommée 'T', mais alors il lancera une' InvalidCastException' à l'exécution. –

+0

Je viens de sortir un extrait du livre Entity Framework de Julie Lerman, donc j'ai supposé qu'elle l'avait fait fonctionner. Bien que je puisse lire beaucoup de C#, il y a quelques constructions qui me sont encore inconnues. – CrispinH

Répondre

4

Je repro, cela devrait techniquement être possible. Clairement, le compilateur n'est pas d'accord. La solution est simple si:

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

Ou comme une doublure:

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

Le compilateur JIT devrait optimiser l'écart temporaire de sorte qu'il ne coûte rien.

+0

Ne serait-il pas plus simple de lancer une 'InvalidCastException'? –

+0

Cela semble avoir fait l'affaire. Je suis le livre Entity Framework de Julie Lerman et il y a un peu plus de travail à faire avant d'avoir du code. – CrispinH

+0

Hans! Merci pour votre correction. J'ai été en mesure de corriger cette méthode et de faire ressortir certaines des autres bizarreries de conversion que l'application de conversion vb ne pouvait pas résoudre et que la solution VB fonctionne pleinement pour le chapitre 26 d'où cela vient. Il est disponible à http://learnentityframework.com/LearnEntityFramework/downloads/#2ed –

0

J'utilise toujours DirectCast(object, type)

1

Vous pouvez utiliser la méthode générique. List.ConvertAll

Étant donné une liste, la méthode renvoie une liste d'un type différent en utilisant une fonction de conversion que vous fournissez.

L'article MSDN I lié a un excellent exemple.