2010-03-18 18 views
7

Wie macht man das in C#?enums in C# - Aufgabe

Lassen Sie uns sagen, dass myclass hat:

private enum Days{}; 


1) Wie kann man in der myclass mit Hilfe des Konstruktor der ENUM-Daten hinzufügen? Wie in:

myclass my = new myclass(Monday,Friday); 

, so dass die enum innerhalb der Klasse die Eigenschaften "Montag, Freitag" erhält.


2) Kann man eine Eigenschaft für einen enume innerhalb der Klasse machen, wenn es initialisiert wird? Zum Beispiel:

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

EDIT:

Was will ich zu tun ist folgende:

eine ENUM in der Hauptklasse haben, wie Enum Tage {Montag, Dienstag, Mittwoch, Donnerstag, Freitag} ;

Ich hätte auch etwas in der Myclass (enum?), So dass ich einige Werte von Days enum zu Myclass internal (enum?) Mit nur einigen, aber nicht allen Werten in der Days enum zuweisen kann.

So dass ich eine myclass bekommen kann, die eine (Enum?) Enthält mit "Montag, Dienstag", während einige myclass222 enthält (Enum?) "Friday" usw.

Ich weiß nicht, ob die Enum ist der richtige Weg, dies innerhalb der Myclass-Klassen zu tun?

+0

In der ersten Zeile des Codes, meinst du, dass ein Array sein? "private enum Days [];" –

+0

Ich meinte, dass eine leere enum sein. Sobald man die Klasse erstellt hat, sollten die enum Days gefüllt werden. – Milan

Antwort

11

Ihre Frage etwas vage ist, aber wenn Sie fragen, tatsächlich, wie eine ENUM zu konstruieren, wo die Werte kombiniert werden können, ist die Antwort mit dem Flags Attribut zu schmücken:

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

Nun, wenn Sie etwas Mitglied des Typs Days haben, können Sie einen kombinierten Wert zuweisen:

Days someDays = Days.Monday | Days.Wednesday; 

Update
Auf Anfrage; hier ist, wie Sie überprüfen, ob ein bestimmter Wert gesetzt wird:

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

Als Antwort auf die Frage, wie ein Mitglied der Enumeration in einer Klasse zu erstellen, wenn die Enum in einer anderen Klasse definiert ist, die wie folgt aussehen würde :

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 Der Code zu wissen, ob ein Tag definiert ist oder nicht, wäre auch nett. Ich glaube, es ist nicht für jeden offensichtlich. – Coincoin

+0

Das scheint zu sein, was ich tun möchte. Die Frage ist, ob enum Days in meiner "Hauptklasse" definiert ist, wie kann ich ein Mitglied von Days in einer anderen "myclass class" haben, so dass ich myclass.someDays = Days.Monday verwenden kann? – Milan

+0

@Zka: Die Enum in Myclass muss als öffentlich erklärt werden – citronas

8

1) Sie können nicht. Die Enumeration muss zur Kompilierungszeit definiert werden

Es scheint, als ob Sie stattdessen nach einer AttributeCollection suchen könnten.(Werfen Sie einen Blick auf Fredrik Mörk Antwort, dass es, was ich versuche, darüber zu sprechen;))

2) my.Days = Days.Tuesday

2

Kann nicht von der Frage sagen, aber vielleicht die Absicht, Sie so etwas wie dieses:

  1. eine Enumeration definieren mit den Tagen

    öffentliche enum Tage { Sonntag, Montag, . . . }

  2. eine Liste Attribut Tage erstellen innerhalb Ihrer Klasse

  3. die benötigten Tage zu Ihrer Liste hinzufügen, wenn Sie sie
0

müssen das scheint zu sein, was ich tun möchte. Frage ist, wenn enum Tage definiert ist in meiner "Hauptklasse", wie kann ich ein Mitglied der Tage in einem anderen "Myclass Klasse", so dass ich myclass.someDays = Days.Monday verwenden kann?

gut ur Hauptklasse vorausgesetzt ist Mainclass und u apt Zugang perms versehen, dann in Abhängigkeit von der Definition von ENUM dh 1. Wenn sie statisch ist dann myclass.someDays = mainClass.Days.Monday; 2. sonst müssen Sie auf es durch ein Objekt von mainClass zugreifen mainClass mc = new mainClass(); myclass.someDays = mc.Days.Monday;