C# and TypeScript – Enum Flags

发布时间 2023-06-25 14:14:18作者: 兴杰

前言

以前就有提过 Enum Flags, 但平日不常用. 最近翻 Angular 源码, 发现它很多地方用到, 而且没有封装语义代码. 一堆符号真的看不惯啊...

于是又去复习了一遍, 熟悉熟悉. 顺便写一篇做记入呗.

这篇 C# 和 TypeScript 会一起讲.

 

参考 

深入理解 TypeScript – 枚举

Enum, Flags and bitwise operators

Stack Overflow – What does the [Flags] Enum Attribute mean in C#?

 

介绍

Enum 大家都很熟悉了. 它就是 number (也有些场景会用 string 啦, 这篇我们 focus number 就好)

enum Status {
    Status0,
    Status1,
    Status2
}

console.log(Status.Status0); // 0
console.log(Status.Status1); // 1
console.log(Status.Status2); // 2

那...如果我们要 Enum List 呢? 

我们当然可以用 Array

const statusList: Status[] = [Status.Status0, Status.Status1];
if(statusList.includes(Status.Status0)) {
    // included
}
if(statusList.some(e => e === Status.Status0)) {
    // included
}

但是有一种性能超级快的方式. 可以取代 Enum Array, 那就是利用二进制操作.

而这就是 Enum Flags 的核心.