Ich brauche eine for-Schleife, die alle Iterationen vervollständigt, auch wenn es irgendeine Ausnahme in einer der Iterationen gibt.Wie behandelt man eine Ausnahme in einer Schleife und wiederhole sie?
Antwort
for (...)
{
try
{
// Do stuff
}
catch (Exception ex)
{
// Handle (or ignore) the exception
}
}
Performance-Tipp, legen Sie Ihre Erklärungen außerhalb der for-Schleife. – freggel
@freggel: haha, derselbe Tipp, den ich geben wollte. Aber das ist die beste Lösung. – user29964
Tipp: Verwenden Sie eine stärker definierte Ausnahme, dann Exception, sagen Sie ApplicationException. Ein großes Problem mit dem Einfangen der Ausnahme ist ThreadAbortException würde hier gefangen werden, wollen Sie wirklich die Anwendung stoppen hier stoppen? Wie wäre es mit einer OutOfMemoryException? –
Einfach jede Iteration in einem try..catch
foreach(Person a in people)
{
try
{
WorkOnPerson(a);
}
catch
{
// do something if you want to.
}
}
Es gibt keine eingebaute Funktion in einer Schleife, das zu tun. Das ist kein in C# eingebautes Sprachfeature, das automatisch eine Exception behandelt und mit einer Schleife fortfährt.
Auch soweit möglich, bitte vermeiden Sie try-catch Blöcke innerhalb der Schleife. Auch wenn es das von Ihnen erwähnte Problem löst, bedenken Sie, dass der Compiler & Laufzeit so viel zusätzlichen Job zu tun hat. Wenn es keine Ausnahmen geben würde, würde alles verschwendet werden.
Stattdessen die Ausnahmen Ausnahmen sein. Das ist etwas, das ausnahmsweise passiert: außerhalb Ihrer entworfenen Input-Überlegungen. Natürlich ist dies nur ein Vorschlag, wenn Sie wirklich die Schleife fortsetzen müssen, gehen Sie mit den beiden oben vorgeschlagenen Optionen.
Nun, die Sache ist ... Ihre Lösung muss eine for-Schleife und eine Art von Fehler/Ausnahmebehandlungsprozess enthalten, so dass Sie wahrscheinlich eine try catch-Anweisung in Ihre for-Schleife einbetten müssen.
Wenn eine Ausnahme ausgelöst wird, gibt es keine Möglichkeit, diese eine Iteration abzuschließen, als wenn die Ausnahme nicht ausgelöst würde. Mit einem try catch können Sie jedoch sicherstellen, dass Ihre Schleife alle Iterationen ausführt, die keine Ausnahmen auslösen.
Wenn Sie Hilfe beim Einbetten der Ausnahmebehandlung in eine for-Schleife benötigen, verwenden Sie einfach das Beispiel von teedyay!
Oder, wenn dies ein wiederkehrendes Muster in Ihrem Programm ist, und Sie gehen das Risiko für diese fangen alle Ausnahme-Stil, wickeln Sie es als Erweiterung für Ihre Sammlungen. Anwendung auf das vorherige Beispiel:
people.ForEachIgnorant(ofThrowingWorkOnPerson);
Oder:
people.ForEachIgnorant(p => WorkOnPersonThatThrows(p));
Umsetzung:
public static void IgnorantForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (var item in source)
{
try
{
action(item);
}
catch { }
}
}
Besser noch, fügen Sie ein Argument vom Typ 'Aktion
Ich denke, es auch ist erwähnenswert, dass, wenn Sie eine generische Liste verwenden - Sie nutzen könnten die folgende, um die Sammlung zu iterieren:
ForEach (Aktion Aktion)
http://msdn.microsoft.com/en-us/library/bwabdf9z.aspx
EmployeesList.ForEach(ProcessEmployee);
void ProcessEmployee(Employee employeeItem)
{
try
{
...
}
catch { }
}
Dies hat den Vorteil, dass der Code in der Schleife wiederverwendbar zu machen.
Wissen Sie, was die Ausnahme ist und was wird sie verursachen? Kannst du es testen und verhindern, dass es geworfen wird, d. CanCompleteStep oder TryCompleteStep. Wenn Sie nicht fertig werden können, überspringen Sie diesen Schritt. Sie können dann die Ausnahmebehandlung aus der Schleife herausnehmen.
- 1. COM: Wie behandelt man eine bestimmte Ausnahme?
- 2. Entitätsrahmen; Wie man eine Ausnahme in foreach-Schleife behandelt und weiterläuft
- 3. Wie wiederhole ich nach einer Ausnahme in Python?
- 4. Wie behandelt man native Ausnahme in Laravel?
- 5. Wie wiederhole ich eine Ausnahme und behalte den Stack-Trace?
- 6. Handle eine Ausnahme in einer While-Schleife
- 7. Wie behandelt man Ausnahmen in der While-Schleife?
- 8. Mongodb C# InsertOne() - Wie behandelt man Ausnahme
- 9. CasperJS - wie behandelt man einen 'Klick' innerhalb einer Schleife?
- 10. Wie behandelt man höchstens eine Ausnahme von zwei CompletionStages
- 11. Rubin: Weiter eine Schleife nach einer Ausnahme
- 12. Wie behandelt man Ausnahmen?
- 13. Wie wiederhole ich Mocha Tests/Schleife
- 14. Wie wiederhole ich eine Ausnahme, die Informationen über eine ursprüngliche Ausnahme enthält?
- 15. Wie behandelt man KeyEvents in einer DataGridViewCell?
- 16. Wie wiederhole ich. Each Schleife eine Rekursion weniger
- 17. Wie behandelt man min_itemsize Ausnahme beim Schreiben in Pandas HDFStore
- 18. Wie behandelt man benutzerdefinierte Ausnahme in Firebird-Prozedur?
- 19. Wie wiederhole ich eine Anweisung N-mal (einfache Schleife)
- 20. Wie wiederhole ich eine Liste und lösche sie?
- 21. Wie behandelt man eine 204 Antwort in einer Backbone.js Sammelanfrage
- 22. Wie behandelt man die Ausnahme für mysql-Schlafabfragen in PHP?
- 23. Python: Wie man eine Ausnahme ignoriert und fortfährt?
- 24. Django, wie man pk und Objekt in einer Funktion behandelt
- 25. Wie man kurze und lange Tastenklicks behandelt
- 26. Wie verworfene Ausnahme in NUnit behandelt
- 27. Wie behandelt man Code-Ausnahmen in node.js?
- 28. Wie man eine heruntergekommene API elegant behandelt
- 29. Wie wiederhole ich das Datum in der for-Schleife?
- 30. PowerShell 2.0 und wie behandelt man Ausnahmen?
Das klingt wie eine alte Schuh gegen Glasflasche Frage: http://tinyurl.com/shoevbottle.Vielleicht möchten Sie viel mehr Details bereitstellen, um bessere Lösungen zu erhalten, einschließlich Ideen, die Sie noch nicht berücksichtigt haben. – Wedge
Wedge, stimme ich zu ... wenn Sie versuchen müssen, in einer for-Schleife, wie unten, versuchen, dann etwas falsch mit der Lösung. –
@Wedge: Ausgezeichnete Metapher, ein weiteres Lesezeichen für mich, danke –