首页 > 解决方案 > 位标志到 int C#

问题描述

我正在使用一个 Web API,我需要传入一个对应于位标志的 int 值。如何计算要传入的 int 值?例如,如果我想要选项 B、选项 E 和选项 F - 对应的 int 值是什么?

还请再举几个例子,比如我只想要选项 G。或者如果我想要 D 和 E。

[Flags] public enum Includes
    {
        OptionA = 1 << 0,
        OptionB = 1 << 1,
        OptionC = 1 << 2,
        OptionD = 1 << 3,
        OptionE = 1 << 4,
        OptionF = 1 << 5,
        OptionG = 1 << 6,
        OptionH = 1 << 7
    }

int includes = ????

标签: c#asp.net

解决方案


如何计算要传入的 int 值?

通过使用按位或,以同样的方式工作:

int seven = 1|2|4;

因为在二进制中,1 是 0001,2 是 0010,4 是 0100,当它们一起进行 OR 运算时,它们变成 0111 (7)

选项 B、选项 E 和选项 F

int bef = (int)(Includes.OptionB | Includes.OptionE | Includes.OptionF);

你可以想象你需要为其他人使用的模式。你或他们的顺序无关紧要

为了解码一个数字,我们使用与 & 类似的技巧:

if(bef & Includes.OptionB == Includes.OptionB)

有一个帮助方法 Enum.HasFlag 你也可以使用


推荐阅读