diff --git a/GFramework.Core/Functional/Result.cs b/GFramework.Core/Functional/Result.cs index 2763a9d..994df5f 100644 --- a/GFramework.Core/Functional/Result.cs +++ b/GFramework.Core/Functional/Result.cs @@ -32,6 +32,10 @@ public readonly struct Result : IEquatable /// 失败时的异常信息 private Result(bool isSuccess, Exception? exception) { + // 强制不变式:失败状态必须携带非空异常 + if (!isSuccess && exception is null) + throw new ArgumentException("Failure Result must have a non-null exception.", nameof(exception)); + _isSuccess = isSuccess; _exception = exception; } @@ -177,6 +181,7 @@ public readonly struct Result : IEquatable [Pure] public static Result Try(Action action) { + ArgumentNullException.ThrowIfNull(action); try { action(); @@ -194,8 +199,11 @@ public readonly struct Result : IEquatable /// 映射后的目标类型 /// 用于转换值的函数 /// 若当前为成功状态,返回包含转换后值的成功 Result;若为失败状态,返回保持原有错误的失败 Result - public Result Map(Func func) => - IsSuccess ? Result.Success(func()) : Result.Failure(_exception!); + public Result Map(Func func) + { + ArgumentNullException.ThrowIfNull(func); + return IsSuccess ? Result.Success(func()) : Result.Failure(_exception!); + } /// /// 将当前 Result 绑定到一个返回 Result 的函数上 @@ -203,6 +211,9 @@ public readonly struct Result : IEquatable /// Result 中值的类型 /// 返回 Result 的函数 /// 若当前为成功状态,返回函数执行的结果;若为失败状态,返回保持原有错误的失败 Result - public Result Bind(Func> func) => - IsSuccess ? func() : Result.Failure(_exception!); + public Result Bind(Func> func) + { + ArgumentNullException.ThrowIfNull(func); + return IsSuccess ? func() : Result.Failure(_exception!); + } } \ No newline at end of file