En primer lugar, quizás este sea un problema debido a un mal diseño. Aquí está mi escenario simplificado:
Tengo una clase llamada Día, representa un día del año, con su fecha y el "tipo" de día.
public class Day{ Date Key; TypeDay type; }Entonces el día puede ser un día laborable o festivo:
public enum TypeDay{ Work, Holiday }Hasta ahora todo bien, pero ahora los días festivos pueden tener subtipos como días pagados y días no pagados. Necesitaría otra enumeración para representar esos subtipos o agregar todos los subtipos en una sola enumeración (en este ejemplo, tengo 2 días y 2 subtipos, pero en la vida real i tener 50-40 tipos) por lo que esto se vuelve tan desordenado.
public enum TypeDay{ Work, Holiday_NonPaid Holiday_Paid }¿Cómo puedo construir esto de una mejor manera, alguna idea?
Los enumeradores no admitieron ese comportamiento. Si cree que se necesita una estructura como esa, puede 'simularla' con una clase estática
static class TypeDay { public const int Work = 0; public static class Holiday { public const int Paid = 1; public const int NonPaid = 2; } }Puede usar indicadores para tratar 'pagado' y 'vacaciones' como propiedades independientes de la enumeración:
[Flags] public enum TypeDay{ Na = 0, Work = 1, Holiday = 2, Holiday_NonPaid = Holiday, Holiday_Paid = Holiday | Work } Esto supone que se paga un día de trabajo. Esto le permite comprobar el tipo exacto o si el día tiene una marca específica, isHoliday = type.HasFlag(TypeDay.Holiday) o isPaid = type.HasFlag(TypeDay.Work) .
Pero hay otros enfoques, como usar clases en lugar de enumeraciones. El enfoque más apropiado dependerá del caso de uso exacto y de lo que desee hacer con los valores.