Action(De T) dans Visual Basic dans la Liste(De T).ForEach
J'ai cherché haut et bas pour de la documentation sur la façon d'utiliser cette fonctionnalité. Alors que la boucle que je pourrait écrire seraient simples et ne prennent pas le temps, je voudrais vraiment savoir comment les utiliser.
Fondamentalement, j'ai une classe, dire, Widget
, avec un Save()
sous qui ne retourne rien. Donc:
Dim w as New Widget()
w.Save()
fondamentalement enregistre le widget. Maintenant, disons que j'ai une collection générique List(Of Widget)
nom widgetList(Of Widget)
et je veux exécuter un Save()
sur chaque élément de cette liste. Il dit que je peux faire un
widgetList.ForEach([enter Action(Of T) here])
....mais comment dans le F fait ce travail??? Il n'existe aucune documentation n'importe où sur la intrablags. Aide serait grandement appréciée.
Si vous utilisez Visual Studio 2005, vous n'avez pas accès à Lamda expressions en VB
OriginalL'auteur Jason | 2009-05-21
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez VB9 (VS2008) je n'ai pas pense vous serez en mesure d'utiliser une fonction anonyme facilement - pour autant que je suis au courant, les fonctions anonymes dans VB9 ont être de véritables fonctions (c'est à dire qu'ils ont pour renvoyer une valeur) alors que
Action<T>
ne retourne rien. C# 2 méthodes anonymes et C# 3 les expressions lambda sont plus générales, qui est pourquoi vous verrez des tas d'exemples à l'aide deList<T>.ForEach
à partir de C# et très peu à l'aide de VB 🙁Vous pourriez potentiellement écrire un
MakeAction
wrapper qui prend unFunction<T,TResult>
et renvoie unAction<T>
, mais je soupçonne d'autres restrictions sur VB9 fonctions anonymes ferait de cette pratique.La bonne nouvelle, c'est que VB10 a beaucoup plus de fonction anonyme de soutien. (C#4 et VB10 sont en train de gagner des uns et des autres fonctionnalités - je crois que MS est en train d'essayer d'aller pour la parité linguistique à partir de maintenant, dans une plus large mesure qu'auparavant.)
Jusqu'à ce que, ensuite, d'utiliser
List<T>.ForEach
vous aurez besoin de rédiger un appropriéSub
et l'utilisationAddressOf
pour créer un délégué. Voici un petit exemple:Ce n'est pas vraiment pratique.. est-il?
OriginalL'auteur Jon Skeet
bien, je suis vraiment dépassée maintenant... 🙂 mais en VB, c'est:
ou, plus compliqué:
OriginalL'auteur Sebastian
est OK si le Widget a obtenu une fonction publique appelée
Save
.Tous les autres commentaires sont faux quand je l'ai essayer.
OriginalL'auteur l0r3nz1
En supposant que VB ne prend pas en charge les expressions lambda, vous pouvez créer une instance de l'Action(de T) délégué en VB à l'aide de cette syntaxe:
OriginalL'auteur 1800 INFORMATION
Ci-dessous devrait fonctionner même si je ne suis pas à la vitesse sur VB.Net vous devrez peut-être ajuster en conséquence.
OriginalL'auteur sipwiz