2010-03-18 14 views
7

Come si fa in C#?enumerazioni in C# - assegnazione

Diciamo che MyClass ha:

private enum Days{}; 


1) Come si fa a aggiungere dati al enum all'interno del myclass con l'aiuto del costruttore? Come in:

myclass my = new myclass(Monday,Friday); 

in modo che l'enume all'interno della classe ottenga le proprietà "Lunedì, Venerdì".


2) Si può anche fare una proprietà per un enume all'interno della classe una volta che è inizializzato? Per esempio:

my.Days = new enum Days(Tuesday); //where the old settings are replaced. 

EDIT:

Quello che voglio fare è la seguente:

Avere un enum nella classe principale, piace Days enum {Lunedì, Martedì, Mercoledì, Giovedì, Venerdì} ;

Avrei anche qualcosa all'interno del myclass (enum?) In modo da poter assegnare alcuni valori da Days enum a myclass internal (enum?) Con solo alcuni ma non tutti i valori nell'enumerazione Giorni.

In modo che posso ottenere un myclass che contiene un (enum?) Con "Lunedi, Martedì", mentre alcuni myclass222 contiene (enum?) "Venerdì", ecc

non so se l'enum è il modo corretto di farlo all'interno delle classi myclass?

+0

Nella prima riga del codice, intendi che si tratta di un array? "giorni privati ​​enum [];" –

+0

Intendevo dire che si trattava di un enum vuoto. Una volta che si crea la classe, i giorni enum dovrebbero essere riempiti. – Milan

risposta

11

La tua domanda è un po 'vago, ma se in realtà si sta chiedendo come costruire un enum in cui i valori possono essere combinati, la risposta è quella di decorare con l'attributo Flags:

[Flags] 
public enum Days 
{ 
    None = 0, 
    Monday = 1, 
    Tuesday = 2, 
    Wednesday = 4, 
    Thursday = 8, 
    Friday = 16, 
    Saturday = 32, 
    Sunday = 64 
} 

Ora, se avete qualche membro del tipo Days, è possibile assegnare un valore combinato ad esso:

Days someDays = Days.Monday | Days.Wednesday; 

Aggiornamento
Su richiesta; ecco come controllare se un certo valore è impostato:

bool wednesdayIsSet = (someDays & Days.Wednesday) == Days.Wednesday; 

In risposta alla domanda su come creare un membro della enum in una classe in cui l'enum è definito in un'altra classe, che sarebbe simile a questa :

public class SomeClass 
{ 
    [Flags] 
    public enum Days 
    { 
     None = 0, 
     Monday = 1, 
     // and so on 
    } 
} 

public class SomeOtherClass 
{ 
    public SomeClass.Days SomeDays { get; set; } 
} 
+0

+1 Il codice per sapere se un giorno è definito o no sarebbe bello anche. Credo che non sia ovvio per tutti. – Coincoin

+0

Questo sembra essere quello che voglio fare. La domanda è, se enum Days è definito nella mia "classe principale", come posso avere un membro di Days all'interno di un'altra "classe myclass" in modo da poter usare myclass.someDays = Days.Monday? – Milan

+0

@Zka: l'enum in myclass deve essere dichiarato come pubblico – citronas

8

1) Non è possibile. L'enum deve essere definito al momento della compilazione

Sembra che si possa cercare invece un AttributeCollection.(Dare un'occhiata alla risposta di Fredrik Mörk, che è quello che stavo cercando di parlare;))

2) my.Days = Days.Tuesday

2

non può dire dalla domanda, ma forse si intende qualcosa di simile:

  1. definire un enum con i giorni

    012.

    giorni pubblici enum { domenica, lunedì, . . . }

  2. creare un attributo elenco dei giorni all'interno della vostra classe

  3. Aggiungere i giorni necessari per la vostra lista quando si ha bisogno di loro
0

Questo sembra essere quello che voglio fare. La domanda è, se il giorno enum è definito nella mia "classe principale", come posso avere un membro di giorni all'interno di un'altra "classe my class" in modo da poter usare myclass.someDays = Days.Monday?

ben assumendo ur classe principale è mainClass eu hanno fornito permanenti apt accesso, quindi a seconda della definizione di enumerazione cioè 1. Se è statico, myclass.someDays = mainClass.Days.Monday; 2. altro, è necessario accedervi tramite un oggetto mainClass mainClass mc = new mainClass(); myclass.someDays = mc.Days.Monday;