string.Remove() funktioniert nich!
-
Hi,
ich habe das Problem das die oben angegebene Methode bei mir nicht funktioniert. Es wird mir kein Fehler angezeigt sondern einfach nichts gelöscht.
Beispiel:eingabeString.Remove(0, 1) //Es soll einfach der erste Char-Wert im String gelöscht werden
Tja, dann passiert aber gar nichts, d.h. der Wert bleibt wo er ist. Ich verstehe nicht wieso das so ist. Ich hoffe es kann mir jemand helfen. Notfalls auch mit einer anderen Methode den Wert löschen. Er muss nur kpl. wegfallen und darf nicht durch ein Leerzeichen ersetzt werden.
Übrigens benutze ich Visual Studio 2005 Pro (bin zwar kein Pro, habe die Version aber günstig bekommen)
Ich danke schon mal für Eure mithilfe!!
-
Wie heißts so schön auf neudeutsch - rtfm. Schau dir einfach an was die Funktion zurückgibt und les dir die Beschreibung zum Datentyp String durch, dann verstehst du warum er bei dir angeblich nichts macht.
-
Ich habe schon erstmal versucht mich schlau zu machen. Also ich habe nicht gleich das Problem an die erfahrene Community abgegeben
Ich denke ich weiß was du meinststringEingabe = eingabeString.Remove(0, 1)
Das war aber nur ein dummes Beispiel, da würde es klappen. Ich kopiere mal mein wirkliches Problem:
foreach (char c in eingabeString) { if (c == '^') { exponenten[z] += c; exponenten[z] += eingabeString[eingabeString.IndexOf('^',0,eingabeString.Length) +1]; eingabeString = eingabeString.Remove(eingabeString.IndexOf('^',0,eingabeString.Length)+1,1); //Hier soll der char-Wert nach '^' gelöscht werden } }
Sorry für das doofe Beispiel
EDIT: Kann es sein das der eingabeString nicht mehr "aktualisiert" wird, während die foreach-Schleife durchlaufen wird?
Wenn ich recht habe mit meiner Vermutung, wie kann ich mein Problem sonst noch lösen, es wäre zu schade, müsste ich das ganze komplett neu stricken wegen diesem Problem
-
Hollowman schrieb:
foreach (char c in eingabeString) { if (c == '^') { exponenten[z] += c; exponenten[z] += EingabeString[eingabeString.IndexOf('^',0,eingabeString.Length) +1]; eingabeString = EingabeString.Remove(eingabeString.IndexOf('^',0,eingabeString.Length)+1,1); //Hier soll der char-Wert nach '^' gelöscht werden } }
Dir ist schon bewußt das Du heir mit ZWEI Strings arbeitest, EingabeString und eingabeString und das dein Remove immer auf EingabeString aufgerufen wird, das ergebnis dann aber in eingabeString steht, so das sich EingabeString nicht ändert, sprich immer den gleichen Inhalt hat?
-
Ist editiert. Ist im Quellcode natürlich nicht so
Weiß nicht wie das hier gekommen ist. Ist aber leider nicht der Fehler.
-
da dein Code ja (wie dir schon bekannt ist) nicht das macht was du von ihm erwartest und wir hier wiederum nicht wissen WAS du denn von ihm erwartest können wir Dir auch nicht sagen was Du falsch machst.
Also wie wärs mal mit einer kleinen Beschreibung was der Code machen SOLL? Ich weis nicht wie oft ich das in den letzten Jahren schon geschrieben habe aber wir können nciht Gedanken lesen...
-
Du schrammst haarscharf an ner Exception vorbei
Wären Strings nicht immutable gäbs ne Exception. Du darfst niemals in einer foreach Schleife die Iterationsvariable ändern. Foreach arbeitet mit einem Enumerator und wenn du den Inhalt der Schleifenvariable änderst wird automatisch der Enumerator ungültig. Im günstigsten Fall bekommst du schon nen Compilerfehler, im zweitschlechtesten Fall macht der Enumerator einfach nicht was er soll weil die interne Position nicht mehr stimmt. Und den schlechtesten Fall hast du, weil foreach sich den Enumerators des Strings holt, und da strings unveränderbar sind bleibt auch der Enumerator gültig. Deine Variable eingabeString zeigt zwar nach dem Remove auf nen anderes String Objekt, der Iterator ist aber noch der Ursprüngliche. Was rauskommt ist einfach nur Mist dessen Verhalten unvorhersagbar ist. Wenn du die Iterationsvariable ändern musst, verwende ne For Schleife.
-
Super, danke. Das war der Fehler, mit for-Schleife klappt es.