C# 在Foreach循环中尝试捕捉

C# 在Foreach循环中尝试捕捉,c#,asp.net,C#,Asp.net,编写以下代码的最佳方法是什么: foreach (DataRow row in table.Rows) { try { SendEmail(emailadress); //method that will send emails MessageSent(true); } catch (Exception) { MessageSent(false); break; } } void

编写以下代码的最佳方法是什么:

foreach (DataRow row in table.Rows)
{
    try
    {
        SendEmail(emailadress); //method that will send emails
        MessageSent(true);
    }

    catch (Exception)
    {
        MessageSent(false);
        break;
    }
}

void MessageSent(Boolean IsSuccesful)
{
    if (IsSuccesful)
    {
        Response.BufferOutput = true;
        Response.Redirect("~/Page.aspx");
    }
    else
    {
        lblSent.Text = "Email has failed.";
    }
}

我正在尝试遍历一个datatable并向datatable中列出的不同电子邮件发送一封电子邮件,然后在datatable中的所有电子邮件发送完毕后,成功重定向到Page.aspx。但是,如果电子邮件失败,我想显示标签lblSent。我只是不知道这是不是最好的方法

除此之外,您不应该捕获
异常
类型。只捕获您知道如何处理的异常。您无法处理
NullReferenceException
ArgumentNullException
,因此不要尝试。仅捕获发送电子邮件时可能抛出的异常。类似于
SmtpException
FormatException
(用于电子邮件地址格式错误)。

您尝试过什么吗?发生了什么事?它工作得很好,但我想知道是否有更有效的方法来写这个。我还是个新手。你为什么不把目标电子邮件排好队,然后发送一次呢?我觉得这比将电子邮件发送到每个单独的地址要有效得多。我觉得这些代码很好。您可能希望在try/catch之外调用MessageSent,这样在它引发异常时就不会感到困惑。您可以使用布尔变量来跟踪发送是否成功。