如何在单个Try/Catch中定位子方法的InvalidOperationException来源?
解决方案:通过步骤跟踪定位错误环节
可以用一个简单的变量记录当前执行的操作步骤,无需拆分try/catch块或修改子方法逻辑,就能在捕获异常时精准定位出错的子方法:
public async Task OnGetAsync() { string currentStep = string.Empty; try { currentStep = nameof(_services.Get_All_CoursesTaken); IQueryable<CourseTaken> coursesQuery = _services.Get_All_CoursesTaken(); currentStep = nameof(AddFilters); coursesQuery = AddFilters(coursesQuery); currentStep = nameof(AddSorting); coursesQuery = AddSorting(coursesQuery); currentStep = nameof(AddPaging); coursesQuery = AddPaging(coursesQuery); currentStep = "ToListAsync 转换操作"; var coursesList = await coursesQuery.ToListAsync(); // 后续业务逻辑处理 } catch (InvalidOperationException ex) { Console.WriteLine($"执行「{currentStep}」时触发InvalidOperationException:{ex.Message}"); // 其他错误处理(如返回错误页面、记录日志等) } }
核心逻辑说明
- 用
currentStep变量在每个操作执行前更新为对应方法名/操作描述,异常抛出时该变量会保留出错环节的标识 - 所有操作仍处于同一个try/catch块中,既不用拆分多个独立块,也不需要修改
AddFilters等子方法的返回类型或内部实现 - 借助
nameof()语法可以直接获取方法的字符串名称,避免手动写字符串出现拼写错误
内容的提问来源于stack exchange,提问作者dave
相关产品推荐
相关产品推荐

