Questa domanda ha in testa per un po 'di tempo, mi dispiace se sembra soggettiva. Ci sono alcuni svantaggi nell'usare bool in proprietà pubbliche e costruttori per oggetti dati. Considera il seguente codice come esempio.Enumerazione di due membri rispetto al valore booleano
Uso bool:
public class Room
{
public string Name { get; set; }
public bool Bookable { get; set; }
public Room(string name, bool bookable);
}
e l'uso di questa classe
Room r = new Room ("101", true);
Questo è opportunamente funzionale, v'è tuttavia un altro modo di attuarla:
Uso enum :
public enum BookingStatus
{
Bookable,
NotBookable
}
public class Room
{
public string Name { get; set; }
public BookingStatus Bookable { get; set; }
public Room(string name, BookingStatus bookable);
}
e l'utilizzo di questa classe
Room r = new Room ("101", BookingStatus.Bookable);
Per me i due sembrano funzionalmente equivalente, ci sono alcuni vantaggi e svantaggi di ogni comunque:
- Quando si impostano le proprietà del metodo Enum è più verbose (puoi dedurre l'uso dell'enum dal solo codice)
- Le enumerazioni possono essere estese per supportare ulteriori stati (particolarmente utili per un'API)
- Le enumerazioni richiedono una digitazione notevolmente maggiore (anche se la riduce notevolmente)
- Le enumerazioni non possono essere utilizzate in condizionali (ad es. se (r.bookable)), anche se apprezzo questo è banale da risolvere.
Mi manca qualcosa, totalmente fuori dal marchio? Non sono sicuro del motivo per cui mi infastidisce così tanto, forse sono troppo ossessivo per il mio bene!
Parere: questo sembra non è il miglior esempio - se si tratta di una vera domanda si/no, quindi i bool sono appropriati. Anche se dovresti nominare correttamente le tue proprietà secondo la convenzione (ad es. "IsBookable") - Un esempio migliore è una domanda non si o no, come per sesso o unità di misura, ecc. - anche se riconosci due stati (pollici vs cm, o maschi vs femmine), dovresti usare un enum, perché queste non sono assolutamente domande "si o no" (anche se potresti farle in domande si/no, non lo sono, e potrebbero essere tutte ampliato per supportare più stati). – BrainSlugs83