C# Wie kann ich mehrere werte von z.b. einer Switch case Anweisung in meine Main Methode ,,returnen''?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Du könntest entweder ein Array zurückgeben oder ein Objekt einer vorher erstellen Klasse. Alternativ (wenn Du eine variable Anzahl an Rückgabewerten hast) empfiehlt sich auch noch eine List.


regex9  15.01.2017, 15:26

Hierfür eine Liste oder ein Array in Betracht zu ziehen, ist sehr schlechter Programmierstil. 

playwithfabi 
Beitragsersteller
 15.01.2017, 13:33

ja das mit der List oder Array hatte ich auch schon als Idee hab sowas nur leider noch nie gemacht ;D. Alos einfach Array/List deklarieren und dann am ende der Methode werte zuweisen ? Oder die List in die case?

Bin halt noch Änfanger (11 Klasse/ berufskolleg(Abi + Ausbildung zum ITA) und der Lehrer ist naja nicht der Beste.

MWojt  15.01.2017, 13:44
@playwithfabi

Du solltest das auf jeden Fall vor dem Switch/Case deklarieren.

Eine Liste ist ein normales Objekt, das Du mit List<Datentyp> liste =new List<Datentyp>() erstellst, bei einem Array musst Du direkt beim Deklarieren direkt die Länge festlegen: Datentyp[] array = new Datentyp[Länge].

Ich frage mich übrigens gerade, ob es in Deinem Fall nicht sinnvoller wäre, einen Integer zurückzugeben, denn so wie ich das verstanden habe, kann ja immer nur einer von Werten true sein, oder?

playwithfabi 
Beitragsersteller
 15.01.2017, 13:52
@MWojt

Also, das die List etc am anfang deklariert wird ist mir klar. Mir gings eher um die Zuweisung der werte aber hab das jz verstanden(kurz gegoogelt).Versteh nur nicht was du jz genau mit der letzteren Sache meinst. Integer und double geben doch nur die größen an also von x bis x. Oder haben die noch andere Unterschiede? Denn true und false hängen ja mit dem Bool zusammen.

Mein plan war halt folgender: Per Switch case entscheidet man sich für die Rechnung (Also was man berechnen will). Am ende des ganzen wird dann der jeweilige Bool der zur Rechnung gehört auf true gesetzt und Wert sowie Bool wird an die Main Methode gesendet. Dort checkt dann eine If abfrage welche Rechnung statt gefunden hat und gibt je nachdem die richtige Lösung an.

MWojt  15.01.2017, 13:55
@playwithfabi

Ah, okay, dann hab ich das beim Überfliegen falsch verstanden ^^

Der Liste gibst Du mit Add Werte. Du benutzt sie dann wie ein Array.

playwithfabi 
Beitragsersteller
 15.01.2017, 13:57
@MWojt

ok danke. Ich werde es dann jz mal versuchen.

Sollte ich nicht mehr schreiben ob es geklappt hat habe ich mir vor Lauter frust die Pulsadern aufgeschnitten ;D.

playwithfabi 
Beitragsersteller
 15.01.2017, 14:13
@MWojt

Nochmal schnell eine kleine frage wegen dem Add.

Ich habe jz folgendes probiert WerteListe Add = UZahl;

aber das klappt net. Da bekomme ich die Meldung : WerteListe ist eine Variable wird aber wie ein typ verwendet.

wenn ich nur Add mache klappt dies natürlich auch nicht, da er es nicht für die Liste erkennt.

muss ich noch etwas dazu schreiben also vor das Add oder habe ich da was Missverstanden?

Danke aufjedenfall schonmal dafür das du dir bis jz die Zeit genommen hast immer zu antworten.

MWojt  15.01.2017, 14:14
@playwithfabi

Add ist eine Methode der Liste. Du musst es also mit liste.Add(Wert) aufrufen ;)

playwithfabi 
Beitragsersteller
 15.01.2017, 14:17
@MWojt

ok danke. Wenn ich doch nur nicht mein buch zu hause vergessen hätte wäre das alles kein problem^^.

playwithfabi 
Beitragsersteller
 15.01.2017, 14:24
@MWojt

Ähmm ich kann jz aber trotzdem immer noch nicht in der static void main Methode auf diese Liste zugreifen. Hab das grad mal probiert. Fehlt mir noch irgendetwas?

Es gibt folgende Optionen:

  • gib ein struct oder ein Objekt zurück, welches alle Werte als eigene Eigenschaften speichert
  • gib den boolschen Wert zurück und speicher den anderen Wert in einem out-Parameter

Sofern es sich nur um 2 Werte handelt (bool und eine Zahl), ist die 2. vorgestellte Option wohl die passendste Lösung. Hier ein kleines Beispiel für die Verwendung von out:

public static void Main()
{
  int value = 0;

  if(colorIsRed("red", out value))
   Console.WriteLine(value);
}

public static bool ColorIsRed(string color, out int value) { switch(color) { case "red": value = 4; return true; case "blue": value = 1; return false; default: value = 0; return false; } }

Zunächst mal - das Verb zu "return" heißt "zurückgeben".

Von dem Text und dem Programmfragment habe ich nichts verstanden, aber zu der im Titel gestellten Frage:

C# ermöglicht "out"-Parameter:

bool tryEvaluateSomething(int a, int b, out double r1, out double r2, out double r3)
{
(versuche, ein Ergebnis zu ermitteln nd setze r1, r2 und r3 auf das Ergebnis)
return (Ermittlung war erfolgreich);
}

playwithfabi 
Beitragsersteller
 15.01.2017, 13:35

Ich habe bis jz im Internet immer nur gelesen, dass man die finger von dem ,,out'' lassen soll, da dies unsauber sein soll aber ich werds mal probieren.... ;D danke.

Und das return zurückgeben bedeutet weiß ich aber ich wollte es irgendwie in englisch stehen lassen KA warum.

Mikkey  15.01.2017, 13:43
@playwithfabi

C# ist auf "Sauberkeit" getrimmt. Die Sprache enthält keine Konstrukte, von denen man generell "die Finger lassen" soll.

"out" ist sauber, die Rückgabe eines Arrays ist es nicht. So eine Konstruktion, bei der I, R und U in Positionen 0, 1 und 2 eines Array zurückgegeben wird, würde Dir bei jedem Codereview um die Ohren gehauen werden.

playwithfabi 
Beitragsersteller
 15.01.2017, 14:01
@Mikkey

ok merk ich mir Danke. Werde einfach mal eure beiden Methoden Ausprobieren.

Kannst nen array zurückgeben mit verschiedenen datentypen innerhalb