ErrorOr 用于 C# (.NET):完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

ErrorOr 用于 C# (.NET):无异常错误处理完整指南

\n\n

在现代 C# (.NET) 开发中,错误处理传统上基于异常机制。然而,这种方法存在一些缺点:异常会中断执行流程,产生堆栈开销,而且最重要的是,它并不总是明确地向开发者表明某个方法可能会失败。ErrorOr 库提供了一种替代方案——函数式方法,其中操作结果以特殊对象的形式返回,该对象可以包含成功值或错误列表。

\n\n

ErrorOr 的核心思想是使错误处理变得显式且类型安全。方法不再抛出异常,而是返回一个 ErrorOr<TValue> 类型的对象。调用代码必须在使用结果之前检查操作是否成功完成。这可以防止许多与未处理异常相关的错误,并使代码更可预测且更易于理解。

\n\n

该库的灵感来自具有强大类型系统的语言,例如 Rust(Result<T, E> 类型)和 F#(Result<'T, 'TError> 类型)。ErrorOr 非常适合 Clean Architecture、Domain-Driven Design (DDD) 和 CQRS 项目,在这些项目中,清晰地区分成功和错误场景非常重要。它还与“Railway Oriented Programming”模式配合得很好,允许构建具有自动错误传递的操作链。

\n\n

安装

\n\n

通过 NuGet 包管理器在 .NET 项目中安装 ErrorOr 库。在终端或包管理器控制台中执行以下命令之一:

\n\n
dotnet add package ErrorOr
\n\n

或者,如果您在 Visual Studio 中使用 Package Manager Console:

\n\n
Install-Package ErrorOr
\n\n

安装后,在您的代码文件中引入命名空间:

\n\n
using ErrorOr;
\n\n

快速入门:最小工作示例

\n\n

让我们编写一个简单的函数,将一个数除以另一个数。我们不再在除以零时抛出异常,而是返回 ErrorOr<double>。

\n\n
using ErrorOr;\n\npublic static class Calculator\n{\n    public static ErrorOr<double> Divide(double dividend, double divisor)\n    {\n        if (divisor == 0)\n        {\n            // 如果除数为零,则返回错误\n            return Error.Validation("Calculator.DivisionByZero", "Divisor cannot be zero.");\n        }\n\n        // 返回成功结果\n        return dividend / divisor;\n    }\n}\n\n// 使用\npublic class Program\n{\n    public static void Main()\n    {\n        ErrorOr<double> result = Calculator.Divide(10, 2);\n\n        if (result.IsError)\n        {\n            Console.WriteLine($"Operation failed: {result.FirstError.Description}");\n        }\n        else\n        {\n            Console.WriteLine($"Result: {result.Value}");\n        }\n\n        // 错误示例\n        ErrorOr<double> errorResult = Calculator.Divide(10, 0);\n        if (errorResult.IsError)\n        {\n            Console.WriteLine($"Operation failed: {errorResult.FirstError.Description}");\n        }\n    }\n}
\n\n

在此示例中,我们看到了关键元素:通过 Error.Validation() 创建错误,返回成功值(隐式转换),以及通过 IsError 属性检查结果。

\n\n

主要方法、函数和类

\n\n

以下是 ErrorOr 库关键组件的详细分析。对于每个元素,都提供了签名、描述和工作代码示例。

\n\n

1. 类 ErrorOr

推荐