You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中如何检测组合枚举值是否包含指定枚举项?

VB.NET中位标志枚举的判断方法

核心结论

你不需要一直使用纯按位运算的判断逻辑,.NET Framework 4.0及以上版本的VB.NET已经提供了你想要的内置判断方法,即HasFlag()。

使用前提

首先需要给位枚举类型添加<Flags>特性,这是.NET识别位组合枚举的标准规范,对应你的枚举示例定义如下:

<Flags>
Public Enum DT_DRAW_FLAG
    DT_CENTER = 1
    DT_VCENTER = 4
    DT_RTLREADING = 131072 ' 对应你示例中组合后得到131077的取值
    ' 其余枚举值按2的幂次规则依次定义
End Enum

具体用法

组合多个枚举标记的写法和VB6基本一致,判断是否包含某个标记直接调用HasFlag方法即可,和你期望的ContainsEnum效果完全相同:

' 组合多个标记值
Dim lMyFlags As DT_DRAW_FLAG = DT_CENTER Or DT_VCENTER Or DT_RTLREADING

' 判断是否包含指定标记
If lMyFlags.HasFlag(DT_RTLREADING) Then
    ' 执行包含DT_RTLREADING的逻辑
Else
    ' 执行不包含DT_RTLREADING的逻辑
End If

补充说明

  • 你熟悉的VB6风格按位与判断写法在VB.NET中完全兼容,仅需要修正原示例里笔误的End Enum为End If即可,写法如下:
    If (lMyFlags And DT_RTLREADING) = DT_RTLREADING Then
        ' 执行包含标记的逻辑
    End If
    
    这种写法和HasFlag执行效果完全一致,在低于.NET Framework 4.0的老旧运行环境中可以使用这种写法。
  • 日常开发优先推荐使用<Flags>特性搭配HasFlag方法,代码可读性更高,是.NET生态的标准实现方式。

内容的提问来源于stack exchange,提问作者tmighty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 03:03:28