Ho un ciclo foreach
che si interrompe durante il ciclo nella condizione del foreach stesso. C'è un modo per try catch
l'elemento che genera l'eccezione e quindi continua il ciclo?Eccezione di cattura lanciata in condizione foreach
Questo verrà eseguito alcune volte fino a quando l'eccezione non colpisce e quindi termina.
try {
foreach(b in bees) { //exception is in this line
string += b;
}
} catch {
//error
}
Questo non funzionerà affatto perché l'eccezione è nella condizione del foreach
foreach(b in bees) { //exception is in this line
try {
string += b;
} catch {
//error
}
}
So che alcuni di voi stanno per chiedere come questo sta accadendo: ecco questo: Eccezione PrincipalOperationException
viene generato perché non è possibile trovare Principal
(b nel mio esempio) in GroupPrincipal
(api).
Modifica: Ho aggiunto il codice qui sotto. Ho anche capito che un membro del gruppo stava indicando un dominio che non esiste più. Ho risolto facilmente questo problema eliminando il membro, ma la mia domanda rimane valida. Come gestisci le eccezioni che vengono lanciate nella condizione di un 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
}
Il problema non è in una "condizione". È in procinto di enumerare l'oggetto 'api '. Per scopi di debug, prova a "manualmente" enumerare "api". È una sorta di 'IEnumerable' o 'IEnumerable'. Fai manualmente '.MoveFirst()' e vedi se ottieni subito l'eccezione. –
Wow, non avevo realizzato che il C# non avesse un curriculum al prossimo ... Ho appena trovato tutti questi forum di ragazzi che cercano l'equivalente. Suppongo che sia solo un altro aspetto positivo dell'essere uno sviluppatore di VB.net. Le mie scuse coniugano – Ccorock
@mellamokb, in realtà non lo uso troppo io stesso. Lavoravo con un programmatore C++ piuttosto interessante che era stato costretto a scrivere in Vb.net, avrebbe sparpagliato il maledetto codice con On error resume next. Perché dovrei fare qualcosa qui? – Ccorock