docs/025_枚举类型扩展方法.md

(开头部分) 4KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

# 枚举类型扩展方法

> 所属包: DotNetCommon.Core



为了方便操作枚举,这里给枚举定义了四要素:code、key、desc、refer。看如下定义:

```csharp
public enum EnumTest
{
    [Description("A项描述")]
    A=1,
    [Description("B项描述")]
    B=2,
    [Description("C项描述")]
	[ReferenceClass(typeof(SocketsHttpHandler))]
    C=3
}
```

在上面的枚举中,```code```是"1,2,3",```key```是“A,B,C”,```desc```是“A项描述、B项描述、C项描述”,而```refer```是"null,null,typeof(SocketsHttpHandler) " 下面的扩展方法就是围绕这三项转换的。

```csharp
//ToCodeKeyDescriptionReferenceClassList(): 将枚举转为由code、key、desc、refer组成元组的集合
//ToCodeKeyDescriptionList(): 将枚举转为由code、key、desc组成元组的集合
//ToKeyDescriptionList():将枚举转为由key、desc键值对组成的集合
//ToKeyCodeList():将枚举转为由key、code键值对组成的集合
//ToCodeKeyList():将枚举转为由code、key键值对组成的集合
//ToReferType():返回枚举项上ReferClass里指向的type值(复合枚举不能使用这个方法,请使用 ToReferTypes())
//ToReferTypes():返回复合枚举项上ReferClass里指向的type值集合

//示例:
var list = EnumTest.B.ToCodeDescriptionList();
list.Count.ShouldBe(3);
list[0].code.ShouldBe(1);
list[0].desc.ShouldBe("A项描述");
```



**复合枚举:**

复合枚举又称为位枚举,即:可以用一个枚举值表示多个枚举值的叠加状态。

示例如下:

```csharp
//复合枚举的本质是对字节进行按位与操作
[Flags]
public enum EnumTest
{
    A = 1, B = 2, C = 4
}
EnumTest test = EnumTest.A | EnumTest.B;

Console.WriteLine($"test contains any EnumTest.A =>{(test & EnumTest.A) != 0}");
Console.WriteLine($"test contains any EnumTest.B =>{(test & EnumTest.B) != 0}");
//test包含A或B任意一项
Console.WriteLine($"test contains any EnumTest.A|EnumTest.B =>{(test & (EnumTest.A|EnumTest.B)) != 0}");
后面还有 61 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读 AI

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。