2010-03-18 16 views
7

¿Cómo se hace esto en C#?enumeraciones en C# - asignación

Digamos que tiene miclase:

private enum Days{}; 


1) ¿Cómo se puede añadir datos a la enumeración dentro de la miclase con la ayuda del constructor? Como en:

myclass my = new myclass(Monday,Friday); 

para que la enumeración dentro de la clase obtenga las propiedades "lunes, viernes".


2) Se puede también hacer que una propiedad para una enume dentro de la clase, una vez que se inicia? Por ejemplo:

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

EDIT:

Lo que quiero hacer es el siguiente:

Tener una enumeración en la clase principal, como Días enum {lunes, martes, miércoles, jueves, viernes} ;

También tendría algo dentro de la clase myclass (enum?) Para poder asignar algunos valores desde Days enum a myclass internal (enum?) Con solo algunos pero no todos los valores en la enumeración Days.

Para que pueda obtener una miclase que contiene un (enumeración?) Con el "lunes, martes", mientras que algunos myclass222 contiene (enumeración?) "Viernes", etc.

No sé si la enumeración ¿Es la forma correcta de hacer esto dentro de las clases de myclass?

+0

En la primera línea de código, ¿quiere decir que se trata de una matriz? "enum privado Days [];" –

+0

Quise decir que sea una enumeración vacía. Una vez que uno crea la clase, los enum Days deben completarse. – Milan

Respuesta

11

Su pregunta es un tanto vaga, pero si en realidad se está preguntando cómo construir una enumeración donde los valores se pueden combinar, la respuesta es decorarlo con el atributo Flags:

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

Ahora, si usted tiene algún miembro del tipo de Days, se puede asignar un valor combinado a ella:

Days someDays = Days.Monday | Days.Wednesday; 

Actualización
Bajo pedido; aquí es cómo comprobar si un determinado valor se establece:

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

En respuesta a la pregunta sobre cómo crear un miembro de la enumeración de una clase cuando la enumeración se define en otra clase, que sería el siguiente :

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 El código para saber si un día está definido o no sería bueno también. Creo que no es obvio para todos. – Coincoin

+0

Eso parece ser lo que quiero hacer. La pregunta es, si enum Days se define en mi "clase principal", ¿cómo puedo tener un miembro de Days dentro de otra "clase myclass" para que pueda usar myclass.someDays = Days.Monday? – Milan

+0

@Zka: la enumeración en myclass se debe declarar como pública – citronas

8

1) No puede. La enumeración se debe definir en el momento de compilación

Parece que podría buscar un AttributeCollection en su lugar.(Echar un vistazo a la respuesta de Fredrik Mörk, que lo que yo estaba tratando de hablar;))

2) my.Days = Days.Tuesday

2

no se puede decir de la pregunta, pero tal vez la intención algo como esto:

  1. definir una enumeración con los días

    enum público Días { Domingo, Lunes, . . . }

  2. crear un atributo lista de los días dentro de su clase

  3. Añadir los días necesarios para su lista cuando los necesite
0

Eso parece ser lo que yo quiero hacer. La pregunta es, si enum Days se define en mi "clase principal", ¿cómo puedo tener un miembro de días dentro de otra clase "myclass " para que pueda usar myclass.someDays = Days.Monday?

bien asumiendo ur clase principal es MainClass y u han proporcionado ondulaciones permanentes de acceso APT, a continuación, dependiendo de la definición de enum es decir 1. Si es estática entonces myclass.someDays = mainClass.Days.Monday; 2. else, tiene que acceder a él a través de un objeto de mainClass mainClass mc = new mainClass(); myclass.someDays = mc.Days.Monday;