C# - Eine Art "Flag" setzen

OP #1020652
Leider kann ich als Noob nicht genau sagen was ich meine, deshalb ein 
Beispiel:

Ich brauche ein "Objekt" welches immer nur einen aus mehreren 
vorgegebenen Werten beinhalten sollte. Diese "Objekte" möchte ich über 
mehrere Klassen hinweg komfortabel nutzen können.

Also als Beispiel:

Ich habe zwei "Dinge":
a) Wohnzimmer
b) Küche

Ich brauche nun ein "Hauptding" dafür:
- Wohnraum

Nun das Problem:

Ich würde das "Ding" "Wohnraum" gerne mit:
1
 Wohnraum.Wohnzimmer
oder
1
 Wohnraum.Küche
setzen können und in einer anderen Klasse gerne z.B. mit:
1
 if(Wohnraum == Wohnraum.Wohnzimmer) {tu was};
oder
1
 if(Wohnraum == Wohnraum.Küche) {tu was};
als Bool auslesen können

Es geht sich mir darum, das ich eine art "Liste brauche" aus deren ich 
auf Werte zugreifen kann.
Quasi also eine Art "Flag".
Da ich später mal viele "Räume" haben werde, kann ich das nicht einfach 
als String machen, deshalb benötigte ich dafür so eine art vorgegebene 
Auswahlliste.

Ich hab mich mal in Enums eingelesen, weis aber nicht so recht ob das so 
funktioniert oder sinnvoll ist (vor allem, wenn man an andere Klassen 
und Funktionen übergibt).

Ich hoffe ihr versteht in etwa was ich vom Prinzip her meine ... kann 
mich leider nicht deutlicher ausdrücken.

MFG
Marco
OP
>>Wieso, Enums sind doch genau dafür gemacht.

Wenn ich das mal wüßte ;-)) ... laut meinem Verständnis sind enums zum 
"zählen" da, das hat für mich als Laien erstmal nichts mit meinem 
Problem zu tun ...

Dann wird das vermutlich auch über mehrere Klassen hinweg so komfortabel 
laufen (kanns leider im Moment nicht ausprobieren sondern nur 
Informationen suchen):
1
using System;
2
public class Draw
3
{
4
    public enum LineStyle
5
    {
6
        Solid,
7
        Dotted,
8
        DotDash,
9
    }
10

11
    public void DrawLine(int x1, int y1, int x2, int y2, LineStyle lineStyle)
12
    {
13
        switch (lineStyle)
14
        {
15
            case LineStyle.Solid:
16
                // durchgehende Linie zeichnen
17
                break;
18

19
            case LineStyle.Dotted:
20
                // gepunktete Linie zeichnen
21
                break;
22

23
            case LineStyle.DotDash:
24
                // Linie aus Punkten und Strichen zeichnen
25
                break;
26

27
            default:
28
                throw(new ArgumentException("Invalid line style"));
29
        }
30
    }
31
}

Mein Problem ist nur:

Ich analysiere etwas und setze dann das Enum und möchte es als 
Rückgabewert einer Funktion in eine andere Klasse übergeben, die 
Deklaration des enum ist aber in dieser Klasse nicht vorhanden ...

Muß ich neben meinem "Wohnraum" auch noch das Enum mit übergeben (man 
kann ja nur ein objekt als Rückgabewert benutzen).

MFG
Marco
OP
Stimmt, dann wäre das Problem gelöst, aber wie krieg ich das enum aus 
meiner Funktion als Rückgabewert in meine andere Klasse ?

Soweit ich weis kann man z.B. int oder string als Rückgabewert einer 
Funktion benutzen, aber über ein enum als Rückgabewert kann ich nichts 
finden.

MFG
Marco
OP
So, ich habe es jetzt mal (mit meinen äußerst bescheidenen Kenntnissen) 
so gelöst:

In "Klasse1" gebe ich als Rückgabewert der Funktion einen integer 
entsprechend des enums:
1
int test = (int)Wohnraum.Küche;

In "Klasse2" werte ich diesen zurückgegebenen integerer entsprechend des 
enums wieder in den "Namen" um:
1
this.toolStripLabel.Text = Enum.ToObject(typeof(Klasse1.Wohnraum),test).ToString();

Das funktioniert soweit. Meine Frage wäre jedoch:

Kann man da noch etwas anders machen bzw. verbessern?
Kann man sich noch Schreibarbeit sparen indem man weiter optimiert?

MFG
Marco
Gast
Marco, Du denkst viel zu weit, man kann in C# alle objekte übergeben, 
also auch ein Emun und alles andere. C# ist sehr ausgereift, darum 
sollte man sich beim Entwickeln am besten von bekannten Einschränkungen 
von anderen Programmiersprachen lösen und davon ausgehen, dass es 
möglich ist. Meist muss man dann nur noch herausfinden, wie genau man es 
umsetzen muss.
OP
@Julian W. :

Vielen Dank, das funktioniert absolut wie gewünscht! Danke!!

@Johnny :
"Zum Glück" kenne ich keine anderen Sprachen, C# ist meine erste, aber 
ich habs leider nicht 3,5 Jahre wie viele andere gelernt.

Ich beiß mich da Stück für Stück durch und da gibt es nunmal eine ganze 
Menge Hürden.

Ich gehe da nach "Lerning by Doing". Ich stecke die Ziele relativ hoch, 
versuche mich dann so gut es geht zu informieren und wenn ich nicht 
weiterkommen sollte frage ich  nach. Das ist meiner Meinung nach die 
beste Möglichkeit und hat am meisten Lerneffekt.

MFG
Marco
Gast
> Ich gehe da nach "Lerning by Doing". Ich stecke die Ziele relativ hoch,
> versuche mich dann so gut es geht zu informieren und wenn ich nicht
> weiterkommen sollte frage ich  nach. Das ist meiner Meinung nach die
> beste Möglichkeit und hat am meisten Lerneffekt.

Ja genau, das habe ich auch so gemacht. Nach einigem wurschteln hatte 
ich dann noch einen (zwar schlechten) C# Programmierkurs besucht, kann 
ich soweit auch sehr empfehlen um sich schnell weiterzuentwickeln.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.