gpt4 book ai didi

c# - 如何抛出异常并继续循环(或如何从一个循环中抛出多个异常)

转载 作者:太空宇宙 更新时间:2023-11-03 17:30:51 25 4
gpt4 key购买 nike

我有两种方法,我需要像这样从一种方法到另一种方法生成异常

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的异常委托(delegate)给方法1,并在方法2中继续foreach循环

更新:

那怎么样

例如:方法1 -> 方法3 -> 方法2 -> 方法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;
}

最佳答案

  1. 在 try/catch 中不能有 yield return
  2. 如果你真的想这样做,你可以这样做,但我真的不推荐这种方法。在我看来,应该在抛出异常的时间和地点处理异常,或者应该重新抛出异常。

    public void Method1()
    {
    Method2(1, ex => SendEmail(ex));
    }

    public IEnumerable<int> Method2(int id, Action<Exception> callback)
    {
    foreach (var i in new List<int>())
    {
    try
    {
    /*Do some stuff*/
    }
    catch(Exception ex)
    {
    callback(ex);
    }

    yield return i;
    }
    }

    private void SendEmail(Exception ex)
    {
    // blah
    }

关于c# - 如何抛出异常并继续循环(或如何从一个循环中抛出多个异常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27601498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com