2011-02-11 15 views
8

me encontré con o sin atributos banderas, puedo hacer la operación poco si he definido la siguiente enumeración¿Es necesario el atributo de banderas?

enum TestType 
{ 
    None = 0x0, 
    Type1 = 0x1, 
    Type2 = 0x2 
} 

Me pregunto por qué necesitamos las banderas de atributos?

+0

posible duplicado de [Enum Flags Attribute] (http://stackoverflow.com/questions/8447/enum-flags-attribute) – BoltClock

+1

En realidad, no creo que sea un engaño; ese dup no toca * sobre por qué es necesario; todos los ejemplos funcionarían de la misma manera –

+2

@Marc: Hmm, acabo de terminar de ver algunas de las respuestas y tienes un punto ahí. – BoltClock

Respuesta

14

C# se los trata de la misma de cualquier manera, pero C# no es el único consumidor:

  • PropertyGrid las puede hacer de manera diferente para permitir combinaciones
  • XmlSerializer serán de aceptación/rechazo combinaciones delimitados en base a este indicador
  • Enum.Parse asimismo (de cadena), y de .ToString() la enumeración se comportan de manera diferente
  • porciones del otro código que muestra o procesa el valor será tratarlos difieren ently

Más importante aún, sin embargo, es una expresión de intención para otros desarrolladores (y código); esto se debe tratar como combinaciones, no valores exclusivos.

+0

¿Podría mencionar ToString, como una operación particularmente común? –

+0

@Jon - hecho; Gracias –

1

A veces las combinaciones de bits de enum son significativas (como FileAccess - leer, escribir, leer + escribir), a veces no son (normalmente). Por lo tanto, [Flags] es una forma descriptiva de almacenar en la información de metadatos que las operaciones de bits son significativas en este tipo de enumeración. Hay varios consumidores de este atributo, por ejemplo ToString de esa enumeración.

Cuestiones relacionadas