Aktion (Of T) in Visual Basic in Liste (Of T) .ForEach

7

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:

%Vor%

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

machen kann %Vor%

.... aber wie in der F funktioniert das ??? Es gibt keine Dokumentation irgendwo in den Intrablags. Hilfe wäre sehr willkommen.

    
Jason 21.05.2009, 09:12
quelle

5 Antworten

11

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:

%Vor%     
Jon Skeet 21.05.2009, 09:29
quelle
12

Nun, ich bin jetzt wirklich veraltet ... :-) aber in VB ist es:

%Vor%

oder komplizierter:

%Vor%     
Sebastian 07.04.2010 22:22
quelle
1
%Vor%

ist OK, wenn Widget eine öffentliche Funktion namens Save erhalten hat.

Alle anderen Kommentare sind falsch, wenn ich es versuche.

    
l0r3nz1 15.08.2011 08:24
quelle
0

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%     
1800 INFORMATION 21.05.2009 09:29
quelle
-1

Das Folgende sollte funktionieren, obwohl ich auf VB.Net nicht auf dem neuesten Stand bin, also müssen Sie möglicherweise entsprechend anpassen.

%Vor%     
sipwiz 21.05.2009 09:18
quelle

Tags und Links