Ardalis.SmartEnum 用于 C# (.NET):完整指南及示例
\n\n1. 这是什么以及为什么需要它
\n\n Ardalis.SmartEnum 是一个用于 C# (.NET) 的库,它解决了开发中最常见的问题之一:使用枚举 (enum) 的不便。C# 内置的枚举本质上是一组整数常量。它们不能包含逻辑、额外字段(例如描述、货币代码、颜色)或方法。这导致代码因使用 switch 或 if-else 而变得臃肿,违反了 SOLID 原则(特别是开闭原则),并使代码更难以维护。\n
\n SmartEnum 提供了一种替代方案:智能枚举 (Smart Enums)。这些是继承自基类 SmartEnum<TEnum, TValue> 的类。此类枚举的每个值都是一个静态的单例字段。因此,您可以向枚举添加任何属性(Name、Value 是必需的,外加任何自定义属性)、方法,甚至实现接口。这将枚举从一组简单的数字转变为具有行为的完整对象。\n
\n 为什么需要它? 首先,为了类型安全。您不会意外地将未在枚举中定义的值赋给变量(与普通枚举不同,普通枚举可以执行 (MyEnum)42)。其次,为了封装逻辑。您无需编写扩展方法或工具类,而是将逻辑直接放入枚举内部。第三,为了可读性。代码变得自文档化:枚举的每个值不仅携带名称,还携带上下文。\n
2. 安装
\n该库通过 NuGet 安装。在包管理器控制台或 .NET CLI 终端中执行以下任一命令:
\n# 通过 .NET CLI\ndotnet add package Ardalis.SmartEnum\n\n# 通过包管理器控制台\nInstall-Package Ardalis.SmartEnum\n 安装后,在文件开头添加 using Ardalis.SmartEnum;。
3. 快速入门 — 最小工作示例
\n让我们创建一个简单的星期枚举。请注意:我们继承自 SmartEnum<TEnum, TValue>,其中 TEnum 是我们的类,TValue 是值的类型(通常是 int 或 string)。
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