Moin miteinander,
ich habe ein kleines Problemchen das ich nicht verstehe. Ich hab versucht es zu Googlen und hab auch hier auf der Website gesucht, jedoch nichts gefunden. Liegt entweder daran das ich zu doof bin oder es einfach nicht in anständige Worte fassen kann. Is ja auch egal..
Folgendes:
Ich habe eine void-Funktion, in der ein string deklariert und mit nichts initialisiert ist (also = "";).
Diesen übergebe ich an eine string-Funktion und bearbeite ihn dort. Jetzt geb ich den string von der string-Funktion zurück und Schwupps die Wupps steht nicht das drin was in der string-Funktion rein geschrieben wurde, sondern wieder nur nichts ("");.
Könnt ihr mir da weiterhelfen? 😃
PS: Sorry für die schlampigen Kommentare
void Main_Game()
{
string sDatenTyp = ""; //1 leerer String initialisiert
WelcherDatenTyp(sDatenTyp); //2 string-Funktion wird aufgerufen
Hinweis_Stufe1(sDatenTyp); //6 Hier ist sDatenTyp wieder leer
}
string WelcherDatenTyp(string sDatenTyp)
{
Random rIndikator = new Random();
int iIndikator = rIndikator.Next(1, 6); //3 Hier wird ein zufälliger int generiert
switch (iIndikator) //4 Mit dem jeweiligen int wird in den
{ //String sDatenTyp ein Datentyp
case 1: sDatenTyp = "char"; //geschrieben und zurückgegeben
break;
case 2: sDatenTyp = "int";
break;
case 3: sDatenTyp = "double";
break;
case 4: sDatenTyp = "float";
break;
case 5: sDatenTyp = "string";
break;
case 6: sDatenTyp = "bool";
break;
}
return sDatenTyp; //5 Hier ist der sDatenTyp z.b. "double"
}
Schau dir mal den unterschied zwischen Referenztypen und Valuetypen an.
Sollte man mal gelesen haben:
Du solltest dir mal Referenztypen und Wertetypen ansehen (genau genommen ist String ein Referenztyp, der sich aber wie ein Wertetyp verhält). Außerdem nimmst du das Return nicht entgegen und so verschwindet es im Nirvana.
Edit: Sorry zu spät
Es geht hier aber eigentlich nicht um den Unterschied zwischen Referenz- und Valuetyp, sondern darum, dass (wie Rioma richtigerweise schrieb) der Rückgabetyp gar nicht verwendet wird bzw. Methodenparameter immer per Value übergeben werden (solange man nicht 'ref' oder 'out' benutzt).
Im Übrigen ist <<"">> ungleich <<NULL>>! Genauso wie Zahl 0 != NULL.
NULL bedeutet nicht initialisiert bzw. der Objektverweis ist nicht festgelegt.
"" ist ein leerer String. -> Es ist ein gülitges Objekt enthalten, nämlich ein leeres.
Hab mich mal kurz über Referenz- und Wertetypen informiert und habs folgendermaßen gelöst
void Main_Game()
{
string sDatenTyp = WelcherDatenTyp();
Hinweis_Stufe1(sDatenTyp);
}
string WelcherDatenTyp()
{
string sDatenTyp = "";
//Zufallsgenerator + schreiben in lokalen String
return sDatenTyp;
}
So hats jetzt funktioniert aber Cat kannst du das mit dem verwenden vom Rückgabetyp noch bissel genauer erläutern?
Und Ezio, danke für den Hinweis 😛
Ich meinte deine Aussage das ein string der folgendermaßen deklariert ist, kein NULL-string ist, sondern ein leerer string 😉
string sTest = "";
Ich meinte deine Frage an Cat. 😉
(Übrigens befinden wir uns mit dem Thema im low-level Grundlagenbereich. Deshalb verweise ich dich zusätzlich auch mal mit auf [FAQ] Wie finde ich den Einstieg in C#? )
Edit: sorry, falscher Link
Achso,
Er meinte doch das mein Rückgabetyp beim ersten Code ,,gar nicht verwendet wird bzw. Methodenparameter immer per Value übergeben werden". Ich wolle nur seinen Lösungsvorschlag dazu wissen 😃
(das mag sein aber ich bin ja auch kein Profi 😄 Außerdem muss ich in der Schule noch C++ lernen..)
Die Methoden-Verwendung ist so in Ordnung. Würde man an vergleichbaren Stellen nicht anders machen.
Das was ich angesprochen habe ist aber bei C#, C++, Java, ... gleich [EDIT] Korrigiere: vom Grundprizip her gleich. Was dann bezüglich Referenzen ins Detail geht, muss man aufpassen[/EDIT]. Das sind wie gesagt low-level Grundlagen, die man durch Lektüre oder Unterricht (oder beidem 😉 ) einfach lernen muss.
Da geht es nicht darum dich zu ärgern. Das ist aber fast wie die Frage was das komisch x in der Mathe-Funktion zu suchen hat. 🤔 😉
Lies dir einfach mal alle gegebnen Links durch und schnapp dir z.B. http://openbook.galileocomputing.de/visual_csharp_2012/
Danke für dein Aufwand aber ich bin kein "strickter Lernen" ^^ ich hab mir das Rheinwerk Openbook zu C# 2012 schon echt n gutes Stück durchgelesen aber ich lern so einfach ziemlich schlecht. Ich lern eher kreuz und quer und vor allem sehr praxislastig was natürlich weniger sinnvoll ist aber so is es nunmal.
Wenn ich n Problem hab oder was ned funzt dann schau ich halt einfach im Internet ob es Leute gibt die das selbe Problem haben/hatten oder zumindest ein ähnliches und versuch es dann davon abzuleiten, wenn nicht meld ich z.B. hier 😉
Du hast es ja jetzt richtig gelöst:
string sDatenTyp = WelcherDatenTyp();
In deinem ersten Code hast du dagegen den Rückgabewert gar nicht verwendet gehabt und daher wurde der leere String ausgegeben.
Und die Lösung mittels 'out' sieht so aus (mit 'ref' wäre es genauso):
void Main_Game()
{
string sDatenTyp;
WelcherDatenTyp(out sDatenTyp);
Console.WriteLine(sDatenTyp);
}
void WelcherDatenTyp(out string typ)
{
typ = "string";
}
Ahh okay. Ja das schaut auch interessant aus.. Erinnert mich klein Bisschen an Pointer.
Aber danke für die Lösung noch, vielleicht kann ichs wann anderst mal so gebrauchen 👍 😁