Zum Inhalt springen

[c#] switch nach Objekt


steinadler

Empfohlene Beiträge

Hallo,

gibt es (außer if-then) eine Möglichkeit per switch-case Objekte abzufragen, also zum Beispiel so.

CMyClass mc0 = new CMyClass();

CMyClass mc1 = new CMyClass();

CMyClass mc2 = new CMyClass();

CMyClass mc3 = new CMyClass();

CMyClass actual;

void run()

{

actual = mc0;

switch(actual)

{

case mc0:

...

usw.

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

hmm.. meines wissens nicht, denn case verlangt einen Ausdruck wie z.B. einen string oder einen Wert, und lässt kein objekt zu.

du könntest aber über den objektnamen gehen, der dir dann "mc[n]" zurückgibt und somit ließe sich das in eine switch case struktur einbauen.

Musst nur aufpassen daß du nicht den BaseName zum Vergleich heranziehst, denn der wäre immer "CMyClass" in deinem Besispiel.

Link zu diesem Kommentar
Auf anderen Seiten teilen

gibt es (außer if-then) eine Möglichkeit per switch-case Objekte abzufragen, also zum Beispiel so.

Meines Wissens können unter C# keine Objekte für das 'Switching' verwendet werden.

Du kannst ja eine eindeutige Variable für jedes Objekt erzeugen lassen. (Z.B. Hashcode oder eben wie bereits erwähnt den Namen) und diese dann prüfen.

Eine Enumeration würde hier glaub ich auch gehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Objekte sollen jeweils noch Parameter- und Wert-Felder haben.

Deshalb möchte ich keinen enum nehmen.

Gibts denn noch eine bessere Möglichkeit als den Namensstring der Objekte abzufragen?

ID möcht ich ungern nehmen, da dies die Leserlichkeit des Codes verschlechtert.

Also ich hab nochmal nachgeschaut und Objekte funktionieren wirklich nicht.

Switch Statement & Objects - .NET C#

The switch statement only supports numbers & strings, it does not support

objects.

Also entweder du schreibst selber eine Type-Safe-Enumeration, gehst über foreach oder machst ein schönes if-else.

Was willst du eigentlich prüfen mit dem Switch ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab ne Klasse, die verschiedene Schritte nacheinander ausführt.

Jeder Schritt ist ne eigene Klasse (mit eigenen Parametern).

Da die Aktivitäten aller Schritte nicht in einzelnen Funktionen stehen sollen, gibt es eine Funktion in der mit switch-case der aktuelle Schritt geprüft wird und abhängig davon dann die gewünschte Aktivität ausgeführt wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aus der Kalten würde ich sagen, dass du einfach ein Interface benutzt, welches eine Funktion implementiert, die dann jede Klasse besitzt.

Diese leitet dann einfach an die entsprechende Funktion weiter oder so. Dann kannst du dir Switching auch sparen. ;)

Müsst ich mir aber genauer anschauen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

So sollte es sein:

Schritt1 = Ausgabe; Parameter = "Geben Sie einen Wert ein";

Schritt2 = Auf Eingabe warten; Parameter = "5 Sekunden";

Schritt3 = Eingabe auswerten

in einer Endlosschleife steht dann:

{

Aktuell = Schritt1;

switch(Aktuell)

{

case Schritt1:

Gehe zu Zeile x und Schreibe den Text aus Parameter hin

case Schritt2:

Warte darauf, bis der Nutzer etwas eingibt

u.s.w

}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schritt2 = Auf Eingabe warten; Parameter = "5 Sekunden";

Ich für meinen Teil, würde hier lieber Parameter = 5 (Integer) nehmen.

Sekunden kannst du dann immer noch dazudichten.

Ansonsten stellt sich für mich die Frage, warum du die Sachen nicht als Variablen implementierst ?

Text ausgaben ect. funktionieren ja auch so.

btw: eine Klasse für einzelne Schritte halte ich nicht für effizient

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das war nur der grobe Ablauf, also so wie ich mir das vorstelle.

@Klotzkopp:

In jedem case wird in Aktuell der nächste Schritt gesetzt.

@TDM:

Das mit den Sekunden ist schon klar, das war nur beispielhaft.

Momentan besteht ein Parameter aus einem Namen und einem Wert.

Meine Aufgabe ist, ne StateMachine zu entwickeln, zu der ich SubStates hinzufügen kann und jedem State möglichst noch Parameter übergeben kann.

In einer bestehenden Anwendung war das so gelöst, dass man mit Add(funktion) eine neue Funktion (aus einem Delegaten) anfügen konnte, welche dann ausgeführt wurde.

Allerdings hatte das den Nachteil, das man dann mitunter 50 Funktionen hat.

Deshalb wollte ich anstreben, die 50 Schritte in eine einzige Funktion zu packen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Naja, aber die Schritte bleiben doch gleich oder stellst du dann die neuen Funktionen in der Ausgabe zur Verfügung ?

Es gibt sowas wie Add(funktion) ?

Die implementiert eine Funktionkomplet mit Methodenrumpf und so ? :eek

Ich glaub ich sollte auch mal C# lernen... Dann brauch ich mich nicht wie bei Java und C++ mit Kompilieren rumschlagen. :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Natürlich bleiben die Schritte gleich.

Allerdings müsste noch ein Schritt hinzu, und zwar der "IDLE"-Schritt.

Sozusagen das Nichts-Tun.

Der würde vorm Start des ganzen und nach dem Auswerten der Eingabe laufen.

Es gab eine Add(funktion)-Funktion. Dieser wurde als Parameter eine Funktion übergeben, in der stand, was bei diesem Schritt zutun ist.

Allerdings entstehen durch 30 Adds auch 30 Funktionen...

Wieso mit Kompilieren rumschlagen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

hmm ich dachte der schreibt die Klasse um :D

ich würde eher sowas machen wie:

getParameter(int schritt) bzw. doSchritt(int schritt) und getAusgabe(int Schritt)

dann kannst du auch dein Switching auch benutzen.

Vielleicht denk ich auch grad vollkommen in die verkehrte Richtung :rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hm...

also am Ende müsste es so ne Art Topf sein, wo ich paar Ablaufschritte reintun kann und bestimmen kann wie die nacheinander aufgerufen werden sollen, bzw. wie bei einer Verzweigung zu verfahren ist.

Anschließend drück ich auf Start und der Topf köchelt vor sich hin und führt die Schritte nacheinander aus.

Jetzt möchte ich gern ne Basis-Klasse die quasi den Topf grob beschreibt. Und dann noch eine Steuerungsklasse, welche vom Topf erbt. Und die Funktionalität der Schritte hinzufügt.

Hinzu kommt die Sache, dass jeder Schritt vielleicht auch noch einen Parameter haben kann.

Die Sache mit der Add()-Funktion finde ich ja genial, aber ich bräuchte dann halt ne Möglichkeit, das, was sonst in 20 Funktionen stände, in eine einzige zu packen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde die Schritte mit einem Integer repräsentieren. Diese werden dann in einer Collection gespeichert. Durch die Methode doSchritt(int schritt) kannst du dann die einzelnen Schritte ausführen.

Es ist nur die Frage, ob du Zahlen eingeben lässt oder Text als Schrittaufruf.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Eingabe findet am Ende höchstwahrscheinlich nicht statt. Das war nur als Beispiel.

In den Schritten stehen Bewegungsabläufe einer Maschine.

Und was meinst du dazu, wenn ich die Schritte wie gehabt als einzelne Objekte mache und jedem eine ID gebe.

Und anschließend die ID's einem ENUM zuordne.

Dann könnte ich ja nach ID's switchen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zu viel Aufwand.

Wenn du schon eine ID hast, dann kannst du die dann in einer Variable speichern und dann z.B. Folgendes machen:


int ID = obj.getID();

switch (ID) {

case MyClass.ID_one:

//...

break;

case MyClass.ID_two:

//...

break;


//...

}

Würd ich jedenfalls so meinen. Aber ist natürlich dir überlassen ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...