- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在为我们的应用程序做一个简单的实体更改日志记录。出现的一个问题是,虽然 DbEntityEntry.State
属性的枚举值显然是互斥的 (See MSDN),但它是用 Flags
属性定义的,并且选择了值好像它们可以组合。
假设这些值是互斥的是否安全?他们为什么选择这条路?
最佳答案
Is it safe to assume that the values are mutually exclusive?
如果您计划 future 的兼容性,则否。作者可能会添加一个值,该值可以与当前值之一结合以涵盖更广泛的状态。你最好不要掩饰。
他们可能不会,但以这种方式定义会使该选项处于打开状态。
Why did they chose this path?
也许,这样人们就不会认为这些值是相互排斥的。
大多数情况下,它允许在单个测试中进行覆盖多个值的掩码测试:
if (state & (EntityState.Deleted | EntityState.Modified | EntityState.Added) != 0) …
这是有效的,因为 enum
的值使用标志布局样式,其中每个都有不同的位设置(或根据另一个有意定义):
Detached = 1,
Unchanged = 2,
Added = 4,
Deleted = 8,
Modified = 16
因此,EntityState.Deleted | EntityState.Modified | EntityState.Added
的值为 8 | 16 | 4
即 28
。如果刚刚增加的值将不起作用:
Detached = 1,
Unchanged = 2,
Added = 3,
Deleted = 4,
Modified = 5
现在 EntityState.Deleted | EntityState.Modified | EntityState.Added
的值为 7
,与 EntityState.Detached | 相同实体。不变 |实体.Deleted
.
FlagsAttribute
用于提供元数据,指示您采用前一种方法而不是后者,因此屏蔽可以起作用。它直接对类型本身产生的唯一影响是 ToString()
的工作方式,即在采用这种方法时提供比不采用时更有意义的值。
关于c# - 为什么 EntityState 枚举是用 FlagsAttribute 定义的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32884534/
我有一个带有标志属性的枚举,我用它来表示权限。我用它来比较 if (CurrentPermissions & Permission1 == Permission1) 等... [FlagsAttrib
下面的代码有什么区别 ' no Flags' Public Enum MyEnum Monday = 1 Tuesday = 2 Wednesday = 4 Thursday = 8
我项目的开发人员实现了以下枚举 [Flags] public enum Permissions { Overview = 1, Detail = 3, Edit = 7,
将 Flags 和 FlagsAttribute 与枚举一起使用有什么区别? 最佳答案 Flags 只是 FlagsAttribute 的简写。在 C# 中,您可以在将属性应用于元素时将其后缀“Att
所以我正在构建一个 MSNP(windows live messenger)客户端。我有这个功能列表 public enum UserCapabilities : long { None =
考虑以下枚举: [Flags] public enum EnumWithUniqueBitFlags { None = 0, One = 1, Two = 2, Fou
假设我们有一个具有 FlagsAttribute 的 enum。 [Flags] enum CarOptions { Sunroof = 1, Spoiler = 2, TintedWin
为了允许在显示新闻故事的方法上使用不同的格式设置选项,我创建了一个可以传入的枚举以指定它的显示方式。 [Flags] private enum NewsStyle { Thumbnail =
我在 C# 中有一个 asmx Web 服务,最近发现了非常有用的枚举 FlagsAttribute。我的声明如下: [Flags] public enum eAdPriority { Non
/// /// Specifies flags for the attributes of a method implementation. /// [ComVisible
我有一个带有 Flags 属性的枚举。 [Flags] public enum AlcoholStatus { NotRecorded = 1, D
关于MSDN Enum Class page ,有几个使用带有标志属性的枚举的例子。一个是这样写的: Public Enum Pets As Integer 还有一个是这样写的: Enum Col
关于MSDN Enum Class page ,有几个使用带有标志属性的枚举的例子。一个是这样写的: Public Enum Pets As Integer 还有一个是这样写的: Enum Col
我正在为我们的应用程序做一个简单的实体更改日志记录。出现的一个问题是,虽然 DbEntityEntry.State 属性的枚举值显然是互斥的 (See MSDN),但它是用 Flags 属性定义的,并
我有两个问题,一个是从另一个推导出来的。 我正在尝试解析一个具有 FlagsAttribute 的枚举属性到另一个也具有相同属性的枚举。我的尝试在下面的代码中。如果有人找到了一种有效的方法,请告诉我。
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
问题 What does the [Flags] Enum Attribute mean in C#? 不问我在问什么,也不回答。如果该问题有这样的答案,请在评论中说明是哪一个(链接),而不是盲目和错
我是一名优秀的程序员,十分优秀!