C#中Try Catch多场景正确用法:多网络路径容错查询实现
实现方案
以下是两种符合需求的实现方式:
1. 嵌套try-catch写法(固定3个路径场景,逻辑直观无额外复杂度)
这种写法直接适配当前3个路径的需求,不需要额外封装,逻辑一目了然:
try { // 替换为第一个路径的校验、打开目录逻辑 Process.Start("explorer.exe", @"\\network\path1"); Console.WriteLine("路径1校验通过,已打开"); } catch (Exception) { try { // 替换为第二个路径的校验、打开目录逻辑 Process.Start("explorer.exe", @"\\network\path2"); Console.WriteLine("路径2校验通过,已打开"); } catch (Exception) { try { // 替换为第三个路径的校验、打开目录逻辑 Process.Start("explorer.exe", @"\\network\path3"); Console.WriteLine("路径3校验通过,已打开"); } catch (Exception) { Console.WriteLine("no paths can be found on this pc"); } } } // 任意路径打开成功后会直接执行此处的后续业务逻辑
实现逻辑:每个try块执行对应路径的操作,无异常就自动跳过后续所有嵌套的catch逻辑,直接走后续代码;当前路径执行失败抛出异常时,才会进入catch块尝试下一个路径,三层全部失败则进入最内层catch输出错误提示。
2. 遍历路径集合写法(路径可扩展场景,维护成本更低)
如果后续可能新增需要尝试的路径,这种写法不需要重复嵌套try-catch,只需在路径列表中新增条目即可:
// 按优先级顺序存储所有需要尝试的网络路径 var pathList = new List<string> { @"\\network\path1", @"\\network\path2", @"\\network\path3" }; bool openSuccess = false; foreach (var path in pathList) { try { // 替换为实际的路径校验、打开目录逻辑 Process.Start("explorer.exe", path); Console.WriteLine($"路径 {path} 校验通过,已打开"); openSuccess = true; // 打开成功直接跳出循环,不再尝试后续路径 break; } catch { // 当前路径失败,跳过继续尝试下一个 continue; } } if (!openSuccess) { Console.WriteLine("no paths can be found on this pc"); } // 后续业务逻辑
补充提示
校验网络路径时建议不要仅依赖Directory.Exists方法,该方法可能因为权限不足、网络临时波动等原因返回错误结果,直接在try块中执行实际的目录打开操作再捕获异常,结果会更准确。
内容的提问来源于stack exchange,提问作者Jorge Rangel
相关产品推荐
相关产品推荐

