Potrzebuję pętli for, która zakończy wszystkie iteracje, nawet jeśli wystąpi jakikolwiek wyjątek w którejkolwiek z iteracji.
Odpowiedzi:
31 dla odpowiedzi № 1for (...)
{
try
{
// Do stuff
}
catch (Exception ex)
{
// Handle (or ignore) the exception
}
}
8 dla odpowiedzi № 2
Po prostu umieść każdą iterację wewnątrz try..catch
foreach(Person a in people)
{
try
{
WorkOnPerson(a);
}
catch
{
// do something if you want to.
}
}
4 dla odpowiedzi nr 3
Lub, jeśli jest to powtarzający się wzór w twoim programie, i podejmujesz ryzyko dla tego stylu wszystkich wyjątków, zawiń go jako rozszerzenie do swoich kolekcji. Zastosowanie go do poprzedniego przykładu:
people.ForEachIgnorant(ofThrowingWorkOnPerson);
Lub:
people.ForEachIgnorant(p => WorkOnPersonThatThrows(p));
Realizacja:
public static void IgnorantForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (var item in source)
{
try
{
action(item);
}
catch { }
}
}
0 dla odpowiedzi nr 4
Chodzi o to, że ... Twoje rozwiązanie będzie musiało zawierać pętlę for i jakiś proces obsługi błędów / wyjątków, więc prawdopodobnie będziesz musiał osadzić instrukcję catch w pętli for.
Jeśli zostanie zgłoszony wyjątek, nie ma mowy o tobiewykona tę jedną iterację, jak gdyby wyjątek nie został wygenerowany, jednak używając metody catch, możesz upewnić się, że twoja pętla wykonuje wszystkie iteracje, które nie powodują wyjątków.
Jeśli potrzebujesz pomocy z osadzaniem wyjątków w pętli for, skorzystaj z przykładu zamieszczonego przez teedyay!
0 dla odpowiedzi № 5
Myślę, że warto również zauważyć, że jeśli korzystasz z ogólnej listy - możesz użyć następujących poleceń do iterowania kolekcji:
ForEach (akcja akcji)
http://msdn.microsoft.com/en-us/library/bwabdf9z.aspx
EmployeesList.ForEach(ProcessEmployee);
void ProcessEmployee(Employee employeeItem)
{
try
{
...
}
catch { }
}
Ma to tę zaletę, że umożliwia ponowne wykorzystanie kodu w pętli.
0 dla odpowiedzi № 6
Czy wiesz, czym jest wyjątek i co będziespowodować? Czy możesz go przetestować i zapobiec jego rzuceniu, np. CanCompleteStep lub TryCompleteStep. jeśli nie możesz ukończyć, po prostu pomiń ten krok. Następnie możesz umieścić wyjątek w pętli.
-5 dla odpowiedzi № 7
Nie ma wbudowanej funkcji w pętli aby to zrobić. Nie jest to funkcja języka wbudowana w C #, która automatycznie obsłuży wyjątek i będzie kontynuowała pętlę.
W miarę możliwości unikaj wprowadzaniatry-catch bloków wewnątrz pętli. Mimo że rozwiązuje problem, o którym wspomniałeś, pomyśl, że kompilator i czas pracy muszą wykonać tyle dodatkowej pracy. Gdyby nie występowały żadne wyjątki, to wszystko, co mogłoby zmarnować.
Zamiast tego niech wyjątki będą wyjątkami. To jest coś, co dzieje się wyjątkowo: poza twoimi zaprojektowanymi uwagami dotyczącymi wprowadzania danych. Oczywiście jest to tylko sugestia, jeśli naprawdę musisz kontynuować pętlę, skorzystaj z dwóch opcji sugerowanych powyżej.