请参阅以下代码:
Public Class Form1
<Flags> _
Public Enum Days
Monday = 0
Tuesday = 1
Wednesday = 2
End Enum
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim s As String = (Days.Monday Or Days.Tuesday).ToString()
End Sub
End Class
s的值变为:星期二。我希望它是:周一,周二,根据Thomas Levesque的回答:FlagsAttribute what for?。
我做错了什么?
更新在Jon Skeets回答之后我尝试了这个:
<Flags> _
Public Enum Days
None = 0
Monday = 1
Tuesday = 2
Wednesday = 4
End Enum
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim s As String = (Days.Monday And Days.Tuesday).ToString()
End Sub
然而,&#39;&#39;现在等于'#NONE&#39;? 数字序列中也有任何逻辑,即0,1,2,4,8等,或者我可以使用0,1,2,3,4等。
答案 0 :(得分:4)
我做错了什么?
您为Monday
提供了值0,这意味着当您执行按位OR时它无关紧要。
基于Flags
的枚举中唯一合理的0的语义值是None
。
你应该:
<Flags> _
Public Enum Days
None = 0
Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
...
End Enum
请注意,除了&#34; none&#34;我包括的价值,与你提到的帖子中给出的值相同。价值观很重要!它们实际上是存储的......这些名称对我们人类来说非常有用。
编辑:现在您已更新了代码,您已将操作员从Or
更改为And
,因此您执行的按位AND为1和2 ...为0.要添加,您需要使用Or
。
是的,数字序列正好按位,每次加倍:1,2,4,8,16,32等。&#34; none&#34;值0只是&#34;没有位设置&#34;。我建议你仔细阅读FlagsAttribute
documentation。