Action(Of T) in Visual Basic in List(Of T).ForEach
Ich habe gesucht hoch und niedrig für eine Dokumentation, wie diese Funktion zu nutzen. Während der loop-ich könnte schreiben einfach werden würde und keine Zeit nehmen, ich möchte wirklich lernen, wie verwenden Sie diese.
Im Grunde habe ich eine Klasse, sagen wir, Widget
mit Save()
sub, die nichts zurückgibt. Also:
Dim w as New Widget()
w.Save()
grundsätzlich speichert das widget. Lassen Sie uns jetzt sagen, dass ich eine generische Sammlung List(Of Widget)
Namen widgetList(Of Widget)
und ich möchten Save()
auf jedes Element in dieser Liste. Es sagt, ich kann eine
widgetList.ForEach([enter Action(Of T) here])
....aber wie in der F funktioniert das??? Es gibt keine Dokumentation überall auf der intrablags. Hilfe wäre sehr geschätzt.
- ps ich habe einige der Forschung auf lambda-Funktionen und versucht, einige dieser Techniken, aber ich konnte nicht mit Ihnen zu arbeiten... ugh...
- Wenn Sie Visual Studio 2005 verwenden, die Sie nicht haben Zugang zu Lamda-Ausdrücke in VB
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mit VB9 (VS2008), die ich nicht denke Sie werden in der Lage sein, um eine anonyme Funktion einfach - so weit ich bin mir bewusst, anonyme Funktionen in VB9 haben zu reellen Funktionen (d.h. Sie haben einen Rückgabewert) in der Erwägung, dass
Action<T>
nichts zurückgibt. C# 2 die " anonyme Methoden und C# 3 der lambda-Ausdrücke sind allgemeiner, das ist, warum Sie werden sehen, massenhaft Beispiele mitList<T>.ForEach
von C# und nur sehr wenige mit VB 🙁Könnte potenziell schreiben Sie eine
MakeAction
wrapper, der nimmt eineFunction<T,TResult>
und zurückAction<T>
, aber ich vermute, andere Beschränkungen VB9 anonyme Funktionen machen würde, unpraktisch.Die gute Nachricht ist, dass VB10 hat viel mehr anonyme Funktion unterstützen. (C#4 und VB10 gewinnen jeweils anderen features - ich glaube, MS wird versuchen, gehen für die Sprache Parität von nun an in größerem Umfang als zuvor.)
Bis dahin zu nutzen
List<T>.ForEach
Sie schreiben müssen, eine entsprechendeSub
und verwendenAddressOf
erstellen Sie einen Delegaten aus. Hier ist ein kleines Beispiel:so, ich bin wirklich inzwischen veraltet... 🙂 aber in VB ist es:
oder, komplizierter:
ist OK, wenn das Widget eine öffentliche Funktion, die aufgerufen wird
Save
.Alle anderen Kommentar falsch sind, wenn ich es versuche.
Unter der Annahme, dass VB nicht unterstützt lambda-Ausdrücke, können Sie erstellen Sie eine Instanz der Action(of T) - Delegierter in der VB unter Verwendung der folgenden syntax:
Den unten sollte funktionieren, obwohl ich nicht bis zu Geschwindigkeit auf VB.Net so müssen Sie möglicherweise entsprechend anpassen.