У меня есть два метода, и для меня нужно сгенерировать исключение из одного в другой какой-то, как этотКак бросить исключение и продолжить цикл (или как бросить много исключение из одной петли)
public void Method1()
{
try
{
Method2(1);
}
catch(Exception e)
{
SendEmail (/* some message */)
}
}
public IEnumerable<int> Method2(int id)
{
foreach (var i in col)
{
try
{
/*Do some stuff*/
yield return i
}
catch
{
/* delegate this exception to Method1 and continue foreach loop */
}
}
}
Как делегировать исключение из метода 2 в способе 1 и продолжить цикл по каждому элементу в методе 2
UPD:
а как насчет
, например: Метод 1 -> method3 -> Method2 -> метод 2 возврата исключение в методе 1
UPD2: к UPD
/*Call*/
var i = new List<int>() {0, 0, 0, 0, 0, 0, 7, 0, 9};
Calc(i, SendMessage);
public static void SendMessage(Exception ex)
{
Console.WriteLine(ex.ToString());
}
public static double Calc(List<int> list, Action<Exception> callback)
{
var a = 0.00;
foreach (var i in list)
{
try
{
a = Calc1(i);/*if here (double)7/i it's just works but in how to include in method*/
}
catch (Exception ex)
{
callback(ex);
}
}
return a;
}
public static double Calc1(int i)
{
var a = 0.00;
a = (double)7/i;
return a;
}
Весь смысл бросать исключение - остановить поток команд и вернуться к вызывающему абоненту. Если вы хотите отправить информацию вызывающему абоненту ** без ** остановки потока команд (т. Е. Цикла), тогда вы должны отправить событие, отправить сообщение и т. Д. – DrKoch
Что бы вы ожидали, если кто-то вызвал Method2 напрямую, через Method1? –
Почему бы просто не вызвать SendEmail в блоке catch в Method2 или это упрощенный пример? – Laurijssen