Entwickler-Ecke
C# - Die Sprache - Eine Variable in einer Methode verändern?
Sharpy78 - Fr 14.12.07 12:41
Titel: Eine Variable in einer Methode verändern?
Hi ;)
nun habe ich meine Funktion super "extern verlagert". Nun gleich das nächste "Problem".
Meine Funktion sieht so aus...
C#-Quelltext
1: 2: 3: 4:
| public static void Decode(string value) { value = "Ich bin das Ergebniss"; } |
doch value ändert sich nicht :-( ich wette ihr klopft euch auf die Schenkel doch ich sehe es nicht warum es nicht klappt. :-(
Kann man in C# den übergebenen Parameter nicht direkt ändern?
MfG Frank
Christian S. - Fr 14.12.07 12:47
Hallo!
Doch, das geht, aber nur, wenn er als Referenz übergeben wird (wenn es nicht schon ein Referenzdatentyp ist). Du kannst ihn als "ref" übergebe:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| public static void Decode(ref string value) { value = "Ich bin das Ergebniss"; }
string value = "foo"; Decode(ref value); |
Dann geht der Compiler davon aus, dass der Parameter auch in der Methode gelesen wird, mosert daher, wenn er vor dem Methodenaufruf nicht befüllt wurde. Willst Du den Parameter ausschließlich dazu verwenden, um einen Wert zurückzugeben, dann benutze "out".
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| public static void Decode(out string value) { value = "Ich bin das Ergebniss"; }
string value; Decode(out value); |
Da dürfte der Compiler (wenn ich mich recht entsinne) mosern, wenn Du den Parameter in der Methode lesen willst. Vor allem mosert er aber, wenn dem Parameter in der Methode kein Wert zugewiesen wird.
Ich nehme an, in Deiner richtigen Methode ist es nicht möglich, der Methode einfach einen Rückgabewert zu verpassen? :-)
Grüße
Christian
JüTho - Fr 14.12.07 12:48
Titel: Re: Eine Variable in einer Methode verändern?
Sharpy78 hat folgendes geschrieben: |
doch value ändert sich nicht :-( ich wette ihr klopft euch auf die Schenkel doch ich sehe es nicht warum es nicht klappt. :-(
Kann man in C# den übergebenen Parameter nicht direkt ändern? |
Hallo Frank,
doch, man kann ihn ändern. Das wirkt sich aber normalerweise nur
innerhalb der betreffenden Methode aus. Da Du den neuen Wert nicht mehr benutzt, siehst Du davon nichts; der Compiler wird vermutlich die gesamte Methode "wegoptimieren".
Wenn der geänderte Wert auch
nach der Rückgabe gelten soll, musst Du (je nach Situation)
out oder
ref verwenden:
C#-Quelltext
1: 2: 3: 4:
| public static void Decode(ref string value) { value = "Ich bin das Ergebnis"; } |
Aber beachte auch:
Zitat: |
Um einen ref-Parameter zu verwenden, müssen sowohl die Methodendefinition als auch die aufrufende Methode explizit das ref-Schlüsselwort verwenden. |
Gruß Jürgen
Nachtrag: Auch unter Berücksichtigung von Christians Hinweisen dürfte folgendes Verfahren besser sein:
C#-Quelltext
1: 2: 3: 4:
| public static string Decode(string value) { return "Ich bin das Ergebnis"; } |
Sharpy78 - Fr 14.12.07 14:40
Danke!
Kleiner Zusatz, große Wirkung! Super! *info.savetogehirn* :D
MfG Frank
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!