Enum con FlagsAttribute o IEnumerableEnum / ISetT

1

Quale è la best practice attualmente accettata in termini di utilizzo enum di C #, un Enum bitwise [Flags] (confrontato usando | and &) o un IEnumerable di valori enum? Sto pensando sia da una prospettiva di concisione del codice che da una prospettiva di manutenzione.

L'unico svantaggio nell'usare l'approccio Flags che posso pensare è l'incapacità di enumerare i valori senza fare l'enumerazione inversa:

var possibleValues = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>();
var applicableValues = possibleValues.Where(x => (containerClass.EnumProperty & x) == x);

Mentre ovviamente l'IEnumerable è più facile da interrogare.

EDIT:

Poiché svick ha giustamente sottolineato, l'IEnumerable potrebbe essere la raccolta errata da utilizzare, un ISet potrebbe essere un esempio migliore.

    
posta Ed James 20.12.2011 - 12:53
fonte

1 risposta

2

Puoi creare un metodo che incapsula l'enumerazione dei flag. In questo modo, l'utilizzo di flag è quasi facile quanto% % co_de.

Una delle ragioni per cui preferirei le bandiere è ciò che significano questi due approcci. Con le bandiere, hai un set . Con IEnumerable<T> , hai una sequenza . Ciò significa che hai un altro caso limite da considerare: cosa succede se la sequenza contiene qualche elemento più di una volta?

    
risposta data 20.12.2011 - 13:39
fonte

Leggi altre domande sui tag