que tienen una enumeración banderas define así:Banderas de impresión Enum como banderas separadas
[Flags]
public enum MyEnum
{
None = 0x00,
Choice1 = 0x01,
Choice2 = 0x02,
Choice3 = 0x04,
Default = Choice1 | Choice2,
All = Default | Choice3
}
Me gustaría una manera de imprimir las cuales se incluyen banderas en MyEnum.Default
. En este caso, me gustaría que la salida fuera algo así como "Choice1, Choice2".
El problema con la simple impresión MyEnum.Default.ToString()
es que la salida sería "por defecto" cuando quiero "Choice1, Choice2".
Aquí es una opción, pero si he usado esta tendría que actualizar la impresión cada vez que cambiaba la enumeración.
((StudyData.Choice1 & StudyData.Default) == StudyData.Choice1 ? StudyData.Choice1.ToString() : "") + ", " +
((StudyData.Choice2 & StudyData.Default) == StudyData.Choice2 ? StudyData.Choice2.ToString() : "") + ", " +
((StudyData.Choice3 & StudyData.Default) == StudyData.Choice3 ? StudyData.Choice3.ToString() : "")
¿Alguien tiene una manera más clara de hacer esto? Idealmente, me gustaría obtener una forma de imprimir los indicadores incluidos en MyEnum.Default
sin tener que cambiar el código de impresión cada vez que agregué un nuevo marcador o cambié el valor predeterminado.
Gracias!
Agradable ... y descaradamente robado para referencia futura. –
Tenga en cuenta que si su enumeración tiene valores negativos (por ejemplo, con el marco de extensibilidad de Visual Studio, Microsoft.VisualStudio.Shell.Interop._VSRDTFLAGS), entonces el uso de ulong y ToUInt64 aquí causará problemas. Si reemplazas con long y ToInt64, manejará enumeraciones con valores negativos. – Nerdtron