You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中抛出异常后如何继续执行代码?如何修改示例代码实现运行不中断?

C# 中throw关键字的设计目的就是中断当前执行流,向上层调用栈抛出异常,如果希望触发错误条件后程序不中断运行,有两种常见的改造方案:

方案1:保留抛出异常逻辑,在上层调用处添加try-catch捕获

如果业务要求必须抛出异常(比如需要上层统一处理错误日志、事件上报等),只需要在调用这段代码的外层包裹try-catch块,捕获异常后完成错误处理即可不中断后续代码执行,适合批量处理等场景,单条数据出错不会影响后续其他任务运行。

示例代码:

// 原有校验逻辑封装为方法
void CheckStringValid(string str)
{
    if (str is null || str == string.Empty)
    {
        throw new Exception("Wrong str");
    }
    // 校验通过后的业务逻辑
    Console.WriteLine("字符串校验通过");
}

// 上层调用逻辑
void BatchProcessTask()
{
    List<string> toProcessStrs = new List<string> { "", "test1", null, "test2" };
    foreach (var str in toProcessStrs)
    {
        try
        {
            CheckStringValid(str);
            // 校验通过后需要执行的其他业务代码
        }
        catch (Exception ex)
        {
            // 捕获异常后完成错误处理,比如记录日志
            Console.WriteLine($"处理出错:{ex.Message}");
        }
        // 无论是否抛出异常,此处及后续的代码都会正常执行
    }
}

方案2:取消抛出异常,改用错误标识/日志记录代替

如果没有必须抛出异常的强制要求,这种方案更符合开发规范:异常本身是用来处理不可预期的运行时错误的,可预期的参数校验错误完全可以用返回值或者日志处理,不需要抛出异常中断流程。

改造后的代码:

if (str is null || str == string.Empty)
{
    // 直接记录错误日志,不抛出异常
    Console.WriteLine("Wrong str");
    // 如果是方法内的校验,也可以返回错误标识方便上层判断处理
    // return false;
}
// 后续代码会直接继续执行

注意:不要在没有上层捕获的场景下直接抛出异常,否则程序必然会中断执行。如果是全局场景不想让异常中断程序,也可以注册全局异常捕获事件做兜底处理,但这种方式只适合做未处理异常的兜底,不推荐用来处理常规的业务校验错误。

内容的提问来源于stack exchange,提问作者Ladislav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 17:36:08