有没有办法在 VB.net 中组合枚举?

有帮助吗?

解决方案

我相信你想要的是一个标志类型枚举。

您需要将 Flags 属性添加到枚举的顶部,然后可以将枚举与“Or”关键字组合起来。

像这样:

<Flags()> _
Enum CombinationEnums As Integer
  HasButton = 1
  TitleBar = 2
  ReadOnly = 4
  ETC = 8
End Enum

笔记: 右边的数字总是两倍大(2 的幂)——这是为了能够分隔已设置的各个标志。

使用 Or 关键字组合所需的标志:

Dim settings As CombinationEnums
settings = CombinationEnums.TitleBar Or CombinationEnums.Readonly

这将 TitleBar 和 Readonly 设置为枚举

要检查已设置的内容:

If (settings And CombinationEnums.TitleBar) = CombinationEnums.TitleBar Then
  Window.TitleBar = True
End If

其他提示

您可以使用 FlagsAttribute 来装饰 Enum,如下所示,这将允许您组合 Enum:

<FlagsAttribute> _
Public Enumeration SecurityRights
None = 0
Read = 1
Write = 2
Execute = 4

然后像这样调用它们(UserPriviltes 类):

Public Sub New ( _
    options As SecurityRights _
)

New UserPrivileges(SecurityRights.Read OR SecurityRights.Execute)

它们有效地组合在一起(位数学),以便上述用户将读取和执行全部保存在一个奇特的 SecurityRights 变量中。

要检查用户是否具有权限,请使用 AND(更多按位数学)来检查用户枚举值与您要检查的枚举值:

//Check to see if user has Write rights
If (user.Privileges And SecurityRights.Write = SecurityRigths.Write) Then
    //Do something clever...
Else
    //Tell user he can't write.
End If

Hth,泰勒

如果我正确理解你的问题,你想组合不同的枚举类型。那么一个变量可以存储两个不同枚举之一的值,对吗?如果您询问如何存储一种枚举类型的两个不同值的组合,您可以查看 Dave Arkell 的解释

枚举只是带有一些语法糖的整数。因此,如果您确保没有重叠,您可以通过强制转换为 int 来组合它们。

但它不会产生漂亮的代码。大多数时候我尽量避免使用枚举。通常,如果您让枚举在代码中滋生,那么它们产生重复的 case 语句和其他混乱的反模式只是时间问题。

组合的关键 Enums 是确保该值是 2 的幂(1、2、4、8 等),以便您可以对它们执行位操作(|= &=)。那些 Enums 可以用 a 标记 Flags 属性。这 Anchor Windows 窗体控件上的属性就是此类控件的一个示例。如果它被标记为标志,Visual Studio 将允许您检查值,而不是在属性设计器的下拉列表中选择单个值。

如果您考虑使用 enum flags() 有一篇很好的文章 这里.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top