/ / Jak radzić sobie z wyjątkiem w pętli i kontynuować iterację? - c #, for-loop

Jak radzić sobie z wyjątkiem w pętli i kontynuować iterację? - c #, for-loop

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 № 1
for (...)
{
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.