<img src="https://yellow-cdn.veclightyear.com/b77ea3a9/6a034d11-82b2-4ec8-b1b4-096f277b9b6d.png" alt="drawing" width="700px"/></br>
dotnet add package ErrorOr
ErrorOr
实例
Then
、FailIf
、Else
、Switch
、Match
)Result.Success
,..)ErrorOr
🤝喜欢它吗?通过给这个项目一个星星来表示你的支持!
ErrorOr<T>
替换抛出异常这个 👇
public float Divide(int a, int b) { if (b == 0) { throw new Exception("不能除以零"); } return a / b; } try { var result = Divide(4, 2); Console.WriteLine(result * 2); // 4 } catch (Exception e) { Console.WriteLine(e.Message); return; }
变成这个 👇
public ErrorOr<float> Divide(int a, int b) { if (b == 0) { return Error.Unexpected(description: "不能除以零"); } return a / b; } var result = Divide(4, 2); if (result.IsError) { Console.WriteLine(result.FirstError.Description); return; } Console.WriteLine(result.Value * 2); // 4
或者,使用Then/Else和Switch/Match,你可以这样做 👇
Divide(4, 2) .Then(val => val * 2) .SwitchFirst( onValue: Console.WriteLine, // 4 onFirstError: error => Console.WriteLine(error.Description));
内部,ErrorOr
对象有一个Error
列表,所以如果你有多个错误,你不需要妥协只保留第一个。
public class User(string _name) { public static ErrorOr<User> Create(string name) { List<Error> errors = []; if (name.Length < 2) { errors.Add(Error.Validation(description: "名字太短")); } if (name.Length > 100) { errors.Add(Error.Validation(description: "名字太长")); } if (string.IsNullOrWhiteSpace(name)) { errors.Add(Error.Validation(description: "