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

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

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

开始课程
\n

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

\n\n

1. 这是什么以及为什么需要它

\n

\n Ardalis.SmartEnum 是一个用于 C# (.NET) 的库,它解决了开发中最常见的问题之一:使用枚举 (enum) 的不便。C# 内置的枚举本质上是一组整数常量。它们不能包含逻辑、额外字段(例如描述、货币代码、颜色)或方法。这导致代码因使用 switch 或 if-else 而变得臃肿,违反了 SOLID 原则(特别是开闭原则),并使代码更难以维护。\n

\n

\n SmartEnum 提供了一种替代方案:智能枚举 (Smart Enums)。这些是继承自基类 SmartEnum<TEnum, TValue> 的类。此类枚举的每个值都是一个静态的单例字段。因此,您可以向枚举添加任何属性(Name、Value 是必需的,外加任何自定义属性)、方法,甚至实现接口。这将枚举从一组简单的数字转变为具有行为的完整对象。\n

\n

\n 为什么需要它? 首先,为了类型安全。您不会意外地将未在枚举中定义的值赋给变量(与普通枚举不同,普通枚举可以执行 (MyEnum)42)。其次,为了封装逻辑。您无需编写扩展方法或工具类,而是将逻辑直接放入枚举内部。第三,为了可读性。代码变得自文档化:枚举的每个值不仅携带名称,还携带上下文。\n

\n\n

2. 安装

\n

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

\n
# 通过 .NET CLI\ndotnet add package Ardalis.SmartEnum\n\n# 通过包管理器控制台\nInstall-Package Ardalis.SmartEnum
\n

安装后,在文件开头添加 using Ardalis.SmartEnum;。

\n\n

3. 快速入门 — 最小工作示例

\n

让我们创建一个简单的星期枚举。请注意:我们继承自 SmartEnum<TEnum, TValue>,其中 TEnum 是我们的类,TValue 是值的类型(通常是 int 或 string)。

\n
using Ardalis.SmartEnum;\n\npublic sealed class Weekday : SmartEnum<Weekday, int>\n{\n    // 静态字段就是枚举的值\n    public static readonly Weekday Monday = new Weekday(nameof(Monday), 1);\n    public static readonly Weekday Tuesday = new Weekday(nameof(Tuesday), 2);\n    public static readonly Weekday Wednesday = new Weekday(nameof(Wednesday), 3);\n    public static readonly Weekday Thursday = new Weekday(nameof(Thursday), 4);\n    public static readonly Weekday Friday = new Weekday(nameof(Friday), 5);\n    public static readonly Weekday Saturday = new Weekday(nameof(Saturday), 6);\n    public static readonly Weekday Sunday = new Weekday(nameof(Sunday), 7);\n\n    // 私有构造函数是必需的\n    private Weekday(string name, int value) : base(name, value) { }\n}\n\n// 使用示例\npublic class Program\n{\n    public static void Main()\n    {\n        var today = Weekday.Monday;\n        Console.WriteLine(today.Name);   // Monday\n        Console.WriteLine(today.Value);  // 1\n\n        // 按值查找\n        var dayFromValue = Weekday.FromValue(3);\n        Console.WriteLine(dayFromValue.Name); // Wednesday\n\n        // 按名称查找\n        var dayFromName = Weekday.FromName("Friday");\n        Console.WriteLine(dayFromName.Value); // 5\n    }\n}
\n\n

4. 主要

推荐