我目前正在尝试在 VB6/COM 项目中使用位标志枚举。但是,当尝试从枚举中读取值时,我得到不一致的结果。
这是枚举定义:
Enum Fruits
None = 0
Apple = 1
Strawberry = 2
Lemon = 4
End Enum
我有一个对象,它公开了 Fruits 类型的属性
Public Get AvailableFruits as Fruits
应该能够读取该值的代码用于根据枚举的每个位的值显示/隐藏标签:
lblAppleAvailable.Visible = basket.AvailableFruits And Fruits.Apple
当执行此代码并且我拥有basket.AvailableFruits = 0
时,我得到 True 作为结果。
知道什么可能导致这种行为吗?
编辑 :
我尝试过使用 enum 的不同值:
basket.AvailableFruits = 0
basket.AvailableFruits And Apple // Returns True
basket.AvailableFruits And Strawberry // Returns True
basket.AvailableFruits And Lemon // Returns False
作为一个侧节点,在调试代码时,如果我把表达式放在一个监视表达式中,我会得到正确的值;但是当在我的代码中评估表达式时,它仍然返回 True。
我尝试使用不同的检查语法:
(basket.AvailableFruits And Fruits.Apple) = Fruits.Apple
当basket.AvailableFruits = 0
:-(
解决方案
在测试了不同的解决方案之后,我能够将问题缩小到 COM 组件。该组件的原始编码器将指针设置为 0 而不是将 0 作为值返回,这导致尝试读取值时出现问题。
我之所以选择 FlipScript 答案,是因为辅助函数似乎是提高代码可读性的一个好技巧。