Mam pętlę foreach
, która zrywa się podczas pętli w stanie samego forea. Czy istnieje sposób na zgłoszenie wyjątku, a następnie kontynuowanie pętli?Wyjątek połowu zgłoszony w warunku foreach
Uruchomi to kilka razy, aż wyjątek trafi, a następnie zakończy.
try {
foreach(b in bees) { //exception is in this line
string += b;
}
} catch {
//error
}
To nie będzie działać w ogóle ponieważ wyjątek jest w kondycji foreach
foreach(b in bees) { //exception is in this line
try {
string += b;
} catch {
//error
}
}
Wiem, że niektórzy z was zapytać, jak to się dzieje, więc tutaj jest to: Wyjątek PrincipalOperationException
jest wyrzucane, ponieważ Principal
(b w moim przykładzie) nie można znaleźć w GroupPrincipal
(pszczoły).
Edytuj: Dodałem poniższy kod. Zorientowałem się również, że jeden z członków grupy wskazuje na domenę, która już nie istnieje. Z łatwością naprawiłem to, usuwając członka, ale moje pytanie wciąż jest aktualne. Jak radzisz sobie z wyjątkami, które są wyrzucane w warunkach foreach?
PrincipalContext ctx = new PrincipalContext(ContextType.domain);
GroupPrincipal gp1 = GroupPrincipal.FindByIdentity(ctx, "gp1");
GroupPrincipal gp2 = GroupPrincipal.FindByIdentity(ctx, "gp2");
var principals = gp1.Members.Union(gp2.Members);
foreach(Principal principal in principals) { //error is here
//do stuff
}
Problem nie jest w "stanie". Jest w trakcie wyliczania obiektu "pszczoły". W celu debugowania spróbuj "ręcznie" wyliczyć "pszczoły". Jest to rodzaj 'IEnumerable' lub 'IEnumerable'. Ręcznie wykonaj '.MoveFirst()' i sprawdź, czy od razu otrzymasz wyjątek. –
Wow, nie zdawałem sobie sprawy, że C# nie ma żadnego życiorysu w następnej ... Właśnie znalazłem wszystkie fora facetów szukających odpowiednika. Przypuszczam, że jest to kolejna dobra rzecz o byciu deweloperem VB.net. Moje przeprosiny kojarzą się z – Ccorock
@mellamokb, Właściwie nie używam go zbyt wiele sam. Pracowałem z dość interesującym programistą C++, który był zmuszony napisać w Vb.net, chciał zaśmiecić ten cholerny kod za pomocą opcji On error resume next. Po co mam tu coś zrobić? – Ccorock