Ich habe hoch und niedrig gesucht, um zu erfahren, wie man diese Funktion benutzt. Während die Schleife, die ich schreiben könnte, einfach wäre und keine Zeit in Anspruch nehmen würde, würde ich gerne lernen, wie man das benutzt.
Grundsätzlich habe ich eine Klasse, sagen wir, Widget
, mit einer Save()
sub, die nichts zurückgibt. Also:
speichert das Widget im Grunde. Nehmen wir an, ich habe eine generische Sammlung List(Of Widget)
name widgetList(Of Widget)
und ich möchte Save()
für jedes Element in dieser Liste ausführen. Es sagt, dass ich ein
.... aber wie in der F funktioniert das ??? Es gibt keine Dokumentation irgendwo in den Intrablags. Hilfe wäre sehr willkommen.
Wenn Sie VB9 (VS2008) nicht denken verwenden, können Sie leicht eine anonyme Funktion verwenden - soweit mir bekannt ist, funktionieren anonyme Funktionen in VB9 have , um echte Funktionen zu sein (dh sie müssen einen Wert zurückgeben), während Action<T>
nichts zurückgibt. Die anonymen Methoden von C # 2 und die Lambda-Ausdrücke von C # 3 sind allgemeiner, weshalb Sie viele Beispiele mit List<T>.ForEach
aus C # sehen und sehr wenige mit VB: (
Sie könnten möglicherweise einen MakeAction
-Wrapper schreiben, der eine Function<T,TResult>
akzeptiert und einen Action<T>
zurückgibt, aber ich vermute, dass andere Einschränkungen für anonyme Funktionen von VB9 dies unpraktisch machen würden.
Die gute Nachricht ist, dass VB10 viel mehr anonyme Funktionsunterstützung hat >. (C # 4 und VB10 gewinnen gegenseitig an Bedeutung. Ich glaube, dass MS von nun an mehr auf Sprachparität setzt als zuvor.)
Bevor Sie List<T>.ForEach
verwenden können, müssen Sie ein entsprechendes Sub
schreiben und AddressOf
verwenden, um daraus einen Delegaten zu erstellen. Hier ist ein kleines Beispiel:
Wenn Sie davon ausgehen, dass VB keine Lambda-Ausdrücke unterstützt, können Sie eine Instanz des Action (of T) -Delegaten in VB mit dieser Syntax erstellen:
%Vor%