c# exit generic ForEach, dass die Verwendung von lambda
Weiß jemand, ob es möglich ist, zu beenden eine generische ForEach verwendet, die lambda? z.B.
someList.ForEach(sl =>
{
if (sl.ToString() == "foo")
break;
//continue processing sl here
//some processing code
}
);
Dieser code sich nicht kompilieren. Ich weiß, ich könnte mit einem regulären foreach-aber für die Konsistenz, die ich verwenden möchten lambda.
Vielen Dank.
- Gibt es einen Grund, MUSS es auf diese Weise getan? Ich war schon immer vorsichtig
break;
. Außerhalb einer switch-case, ich habe nie gesehen, wie Sie benötigen. - Ich benutze
break
undcontinue
viel. Manchmal wollen Sie nicht nur die Schleife, um auszuführen alles, was er durch war, undbreak
/continue
vereinfacht den code. - Gibt es irgendeinen Grund, warum Sie lieber einen Lambda-Ausdruck dafür?
- Ich bin neugierig, haben Sie tatsächlich gefunden-code, wo der EINZIGE Weg, um zu verhindern, dass der rest des Körpers von der Ausführung war, mit Pause/fortsetzen? Nichts anderes hätte Sie erzielt die gleiche Wirkung?
- In Bezug auf Stil,
if(condition) continue;
ist IMO sauberer alsif(!condition) { loop body }
- Natürlich ist es immer möglich, code zu schreiben, ohne
break
odercontinue
. Aber das kann, desto Ausführlicher, weniger comprehesible, und weniger effizienten code.break
undcontinue
wurden so konzipiert, dass Sie schreiben können, prägnanten, effizienten code in ungewöhnlichen Situationen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicher. Aber beachten Sie zunächst, dass ich empfehlen, gegen diese, ich sage, dass ein Sequenz-operator sollte nicht haben eine Nebenwirkung, und eine Aussage haben sollte, ein Nebeneffekt. Wenn du etwas tust, dass ForEach-lambda, dann machen Sie eine Anweisung in den Körper einer foreach-Schleife anstatt es wie ein Sequenz-operator.
Gesagt, hier ist, was Sie tun. Zuerst schreiben Sie sich eine ForEach-das funktioniert auf beliebigen Sequenzen, die nicht nur Listen:
Und jetzt schreiben Sie Ihre Pause so:
ForEach
geben Sie Dinge abif
: community.bartdesmet.net/blogs/bart/archive/2009/07/11/....Vom MSDN
Weiß nicht, ob das hilft, erhalten den code, den Sie geschrieben. Das relevante Zitat aus dem Ende des MSDN-Artikel.
Achtung: der code unten ist nicht ernst genommen zu werden und ist zum Zwecke der Unterhaltung nur!
Kann man 'simulieren' und weiter mit einer frühen Rückkehr so:
Sagte, ich denke, dass die Nebenwirkungen innerhalb von lambda sind ein Zeichen, dass Sie tun es falsch. Verwenden Sie eine angemessene foreach statt. Oder so etwas wie TakeWhile, als Eric freundlich demonstriert bereits.
Wie über dieses?