FlagsAttribute是为了什么?

ser*_*hio 3 .net vb.net attributes

下面的代码有什么区别

' no Flags'
Public Enum MyEnum
  Monday = 1
  Tuesday = 2
  Wednesday = 4
  Thursday = 8
End Enum
Run Code Online (Sandbox Code Playgroud)

<Flags()> _ 
Public Enum MyEnum
  Monday = 1
  Tuesday = 2
  Wednesday = 4
  Thursday = 8
End Enum
Run Code Online (Sandbox Code Playgroud)

我做了

Dim days As MyEnum = MyEnum.Monday Or MyEnum.Tuesday Or MyEnum.Wednesday 

If (days And MyEnum.Tuesday) = MyEnum.Tuesday Then
  Console.WriteLine("Tuesday OK") ' here'
Else
  Console.WriteLine("Tuesday NOK")
End If

If (days And MyEnum.Thursday ) = MyEnum.Thursday Then
  Console.WriteLine("Thursday OK")
Else
  Console.WriteLine("Thursday NOK") ' here'
End If
Run Code Online (Sandbox Code Playgroud)

并在两种情况下获得相同的结果(有或没有FlagAttribute).

Tho*_*que 5

基本上,它告诉CLR可以组合枚举的值.如果没有此属性,组合这些值将导致未知值(但它仍然有效).使用该属性,可以正确解释组合

没有Flags属性:

' Gives "Monday, Tuesday" '
Dim s As String = (MyEnum.Monday Or MyEnum.Tuesday).ToString() 
Run Code Online (Sandbox Code Playgroud)

没有Flags属性:

' Gives "3" '
Dim s As String = (MyEnum.Monday Or MyEnum.Tuesday).ToString() 
Run Code Online (Sandbox Code Playgroud)

  • 好的,但**实际上**(没有`ToString()`输出差异)它有什么意义吗? (2认同)
  • 它还可以影响XML序列化.如果枚举没有Flags属性,则序列化值组合将失败... (2认同)