c# - 有没有办法将数字总和转换回枚举?
问题描述
因此,在一个名为 osu 的游戏中有一些模组,当我为任何游戏调用 api 时,我会返回模组编号的总和(例如 72)。但是,我想不出任何方法将其转换回原始枚举名称。
我尝试过这种方式:(Mods)enabled_mods
,但这只会退回数字。
enum Mods
{
None = 0,
NoFail = 1,
Easy = 2,
TouchDevice = 4,
Hidden = 8,
HardRock = 16,
SuddenDeath = 32,
DoubleTime = 64,
Relax = 128,
HalfTime = 256,
Nightcore = 512, // Only set along with DoubleTime. i.e: NC only gives 576
Flashlight = 1024,
Autoplay = 2048,
SpunOut = 4096,
Relax2 = 8192, // Autopilot
Perfect = 16384, // Only set along with SuddenDeath. i.e: PF only gives 16416
Key4 = 32768,
Key5 = 65536,
Key6 = 131072,
Key7 = 262144,
Key8 = 524288,
FadeIn = 1048576,
Random = 2097152,
Cinema = 4194304,
Target = 8388608,
Key9 = 16777216,
KeyCoop = 33554432,
Key1 = 67108864,
Key3 = 134217728,
Key2 = 268435456,
ScoreV2 = 536870912,
LastMod = 1073741824,
KeyMod = Key1 | Key2 | Key3 | Key4 | Key5 | Key6 | Key7 | Key8 | Key9 | KeyCoop,
FreeModAllowed = NoFail | Easy | Hidden | HardRock | SuddenDeath | Flashlight | FadeIn | Relax | Relax2 | SpunOut | KeyMod,
ScoreIncreaseMods = Hidden | HardRock | DoubleTime | Flashlight | FadeIn
}
我想获取已求和的值的名称,例如如果我有 72 我应该得到 HiddenDoubleTime。
解决方案
这是您可以执行此操作的一种方法:
Mods selectedMods = (Mods)72;
var individualMods = Enum
.GetValues(typeof(Mods))
.Cast<Mods>()
.Where(mod => selectedMods.HasFlag(mod) && mod != Mods.None)
.ToList();
推荐阅读
- mysql - 在为 mysql 版本 19.1 运行 oracle Goldengate 时收到警告--> !!! 警告 !!!--> libssl-2.17.0-stub.so
- r - 从前几行填充 NA,但添加一个级别
- c - 如何将 .h 文件中的外部符号验证为 .c 文件?
- c# - 无法强制 ANSI 编码 (windows-1252)
- python - 使用图像文件名 + 标签的 csv 将图像映射到标签的最快方法
- python - 如何用破折号打印日期?
- python - 对 django rest 框架使用范围过滤器
- spring-boot - 如何将drl文件的Cosequence中的值返回给java
- prometheus - Grafana + Prometheus 如何在查询指标中使用正则表达式?
- javascript - 为每个新状态创建新段落,而不是更新我的有状态组件