标志枚举(Flag Enum)
在 C# 中,使用 Flags
属性声明的枚举被称为标志枚举(Flag Enum)。标志枚举允许将多个枚举值组合成一个单独的值,以便同时表示多个状态或选项。
当你使用标志枚举时,可以通过按位运算来组合、拆分和检查枚举值。这使得标志枚举在表示各种组合状态的选项时非常有用。
[Flags] public enum EnumCustomFunction : long { 多涂层 = 1 << 0, 导入检测数据 = 1 << 1, 导入ABCard数据 = 1 << 2, 导出报告自适应列宽 = 1 << 3, 新项目管理 = 1 << 4, }
,EnumCustomFunction
是一个标志枚举,其中每个枚举值都是通过左移位运算符 <<
来定义的。例如,多涂层
的值是 1 左移 0 位,即 1,导入检测数据
的值是 1 左移 1 位,即 2,以此类推。
以下是一些标志枚举的常见用法:
-
组合枚举值:
EnumCustomFunction options = EnumCustomFunction.导入检测数据 | EnumCustomFunction.导入ABCard数据;
-
拆分枚举值:
if ((options & EnumCustomFunction.导入检测数据) == EnumCustomFunction.导入检测数据) { // 包含导入检测数据选项 }
if (customerforminfo != null && customerforminfo.ConfigSummary != null && ((EnumCustomFunction)customerforminfo.ConfigSummary & EnumCustomFunction.新项目管理) == EnumCustomFunction.新项目管理) { isaddproject = 1; }
-
添加或移除枚举值:
csharpCopy Codeoptions = options | EnumCustomFunction.新项目管理; // 添加新项目管理选项 options = options & ~EnumCustomFunction.多涂层; // 移除多涂层选项
-
List<int> configfuncValues = new List<int>(); if (model != null && model.ConfigFunc > 0) { foreach (EnumConfigFunc value in Enum.GetValues(typeof(EnumConfigFunc))) { if (((EnumConfigFunc)model.ConfigFunc & value) == value) { configfuncValues.Add((int)value); } } } [Flags] public enum EnumConfigFunc { /// <summary> /// 存心节 /// </summary> [Description("存心节")] ScriptureSetting = 1 << 0, /// <summary> /// 邮箱设置 /// </summary> [Description("邮箱设置")] EmailSetting=1 << 1, /// <summary> /// 微信公众号设置 /// </summary> [Description("微信公众号设置")] WechatAppSetting=1 << 2, /// <summary> ///点赞评论菜单设置 /// </summary> [Description("点赞评论菜单设置")] AllowCommentsMenusSetting=1 << 3 } <el-tab-pane label="存心节" name="scripturetab" v-if="model.ConfigfuncValues && model.ConfigfuncValues.length > 0 && model.ConfigfuncValues.includes(1)"> //获取各各色站点配置选项合辑 var configFuncs = roles.Where(x => x.ConfigFunc.HasValue && x.ConfigFunc.Value > 0) .Select(x => x.ConfigFunc.Value) .ToList(); if (configFuncs != null && configFuncs.Any()) { var configfuncValues = configFuncs.SelectMany(configFunc => Enum.GetValues(typeof(EnumConfigFunc)) .Cast<EnumConfigFunc>() .Where(value => ((EnumConfigFunc)configFunc & value) == value) .Select(value => (int)value) ) .Distinct() .ToList(); result.Data.ConfigfuncValues = configfuncValues; }
此随笔或为自己所写、或为转载于网络。仅用于个人收集及备忘。