Si j'ai le code suivant: et disons Si cela se termine, existe-t-il un moyen d'obtenir le reste des éléments de la collection pour exécuter leurs méthodes ? p> p> SOMEMETHOD () code> jette une exception. Est-ce que
foreach code> continue itération ou cela est-il juste arrêter là-bas là-bas? P>
3 Réponses :
Oui, si une exception est lancée, la boucle se ferme. Si vous ne voulez pas ce comportement, vous devez manipuler des exceptions dans votre délégué. Vous public static Action<T> SuppressExceptions<T>(Action<T> action)
{
return item =>
{
try
{
action(item);
}
catch (Exception e)
{
// Log it, presumably
}
};
}
Merci pour cette réponse bien pensée, très informative.
Il lancera une erreur. Vous êtes également bien sur votre façon de réimplémenter foreach code>. Que diriez-vous de:
public static IEnumerable<Tuple<T,Exception>> ForEachWithCatch<T>(this IEnumerable<T> items, Action<T> action)
{
var exceptions = new List<Tuple<T,Exception>>();
foreach(var item in items)
{
try
{
action(item);
}
catch(Exception e)
{
exceptions.Add(Tuple.Create(item, e));
}
}
return exceptions;
}
Si votre SOMEMETHOD CODE> a mis en œuvre un bloc d'essais, alors foreach continuera
list.ForEach(i =>
{
try
{
i.SomeMethod();
}
catch(Exception ex)
{
}
});