将告别 throw exception!为什么 Result 这句话可能是在讨论编程中异常处理和返回结果(Result)的概念。1. **将告别 throw exception**:这里的throw exception指的是在编程中抛出异常(Excepti

摘要:引言:一个普遍存在的“坏味道” 如果你在C#项目中看到这样的代码,一定不会感到陌生: public User Login(string username, string password) { var user = FindUser(use
引言:一个普遍存在的“坏味道” 如果你在C#项目中看到这样的代码,一定不会感到陌生: public User Login(string username, string password) { var user = FindUser(username); if (user == null) throw new Exception("用户不存在"); // ❌ 熟悉的模式 if (!VerifyPassword(user, password)) throw new Exception("密码错误"); // ❌ 另一个熟悉的模式 return user; } 这种使用异常来处理业务逻辑的做法,几乎成了C#开发的“标准范式”。 可是,从来如此,便是对的么? 一、异常的“原罪” —— 我们一直在滥用它 1.1 异常的本质是什么? 首先,我们要明白C#语言里的异常(Exception)的设计初衷: // 这些才是异常真正的使用场景: public void ReadFile(string path) { if (string.IsNullOrEmpty(path)) throw new ArgumentNullException(nameof(path)); // ✅ 参数检查 if (!File.Exists(path)) throw new FileNotFoundException($"文件不存在: {path}"); // ✅ 系统错误 // 尝试读取文件,可能抛出IOException等 var content = File.ReadAllText(path); } 异常是为真正的"异常情况"设计的,比如: 系统资源不可用(文件不存在、数据库连接失败) 程序状态异常(空指针、数组越界) 参数验证失败(前置条件不满足) 1.2 业务逻辑 ≠ 异常情况 业务错误(用户不存在、密码错误、余额不足)是可预见的正常业务流程,而不是异常情况。
阅读全文