c # Exit generische ForEach, die Lambda verwenden

7

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.

    
Peanut 12.02.2010, 03:05
quelle

4 Antworten

17

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%     
Eric Lippert 12.02.2010, 03:09
quelle
7

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.

    
cmw 12.02.2010 03:10
quelle
1

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.

    
cfern 12.02.2010 09:12
quelle
0

Wie wäre es damit?

%Vor%     
Islam Yahiatene 12.02.2010 09:47
quelle

Tags und Links