Autor Beitrag
Sharpy78
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Fr 14.12.07 12:41 
Hi ;)

nun habe ich meine Funktion super "extern verlagert". Nun gleich das nächste "Problem".
Meine Funktion sieht so aus...

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:
ausblenden 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".

ausblenden 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 14.12.07 12:48 
user profile iconSharpy78 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:
ausblenden 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
public static string Decode(string value)

    return "Ich bin das Ergebnis";
}
Sharpy78 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Fr 14.12.07 14:40 
Danke!

Kleiner Zusatz, große Wirkung! Super! *info.savetogehirn* :D

MfG Frank