Weiß jemand, ob es möglich ist, ein generisches ForEach, das Lambda verwendet, zu verlassen? z.B.
%Vor%Dieser Code selbst wird nicht kompiliert. Ich weiß, dass ich eine normale foreach verwenden könnte, aber aus Gründen der Konsistenz möchte ich Lambda verwenden.
Vielen Dank.
Sicher. Aber zuerst, beachten Sie, dass ich dagegen empfehle; Ich sage, dass ein Sequenzoperator keine Nebenwirkung haben sollte, und eine Aussage sollte einen Nebeneffekt haben. Wenn Sie etwas in diesem ForEach-Lambda tun, machen Sie es im Körper einer foreach-Schleife zu einer Aussage, anstatt es wie einen Sequenzoperator aussehen zu lassen.
Das heißt, hier ist was du tust. Zuerst schreibst du dir ein ForEach, das an beliebigen Folgen arbeitet, nicht nur an Listen:
%Vor%Und jetzt schreibst du deine Pause so:
%Vor%Von MSDN
Die folgenden Regeln gelten für die Variable Geltungsbereich in Lambda-Ausdrücken:
snip
Ein Lambda-Ausdruck kann keine enthalten Goto-Anweisung, Break-Anweisung oder continue-Anweisung, deren Ziel ist außerhalb des Körpers oder im Körper eines enthielt anonyme Funktion.
Ich weiß nicht, ob das hilft, wenn man den von Ihnen geposteten Code verwendet. Das entsprechende Zitat stammt vom Ende des MSDN-Artikels.
Achtung: Der unten stehende Code ist nicht ernst zu nehmen und dient nur zu Unterhaltungszwecken!
Sie können einen Fortlauf mit einer vorzeitigen Rückkehr wie folgt simulieren:
%Vor%Das heißt, ich denke, dass Nebenwirkungen innerhalb von Lambda ein Zeichen dafür sind, dass Sie es falsch machen. Benutze stattdessen eine richtige foreach. Oder etwas wie TakeWhile, wie Eric es schon freundlicherweise demonstriert hat.