Lassen Sie uns sagen, ich habe ein Array von Strings von der Ausführung dieses Split-MethodeWann und beste Weg, exakte Kopien von Zeichenketten in C#
string[] parsed = message.Split(' ');
Und dann machen möchte ich in einem neuen einen bestimmten Wert dieses Arrays speichern
Stringstring name = parsed[3];
nun diese Zeichenfolge aus dem Array mit einer Erweiterung Methode, die ich entfernen, entfernt diese Methode den Wert am angegebenen Index und verschiebt alles wieder die Lücke
parsed = parsed.RemoveAt(3);
zu füllen
Ich bin mir bewusst, dass, weil Zeichenfolgen Verweistypen in C# sind, meine Namensvariable jetzt null ist, nachdem ich etwas gesucht habe, wurde mir gesagt, dass das Erstellen von genauen Kopien von Zeichenfolgen in C# nutzlos ist. Was ist der beste und korrekte Weg, um die Namensvariable als neue Instanz festzulegen, damit sie nach dem Aufruf von .RemoveAt() nicht gelöscht wird?
EDIT:
Dies ist die beste Art und Weise, die ich bisher
gefundenstring name = new string(parsed[3].ToCharArray());
Ein anderer Weg vorgeschlagen von Willy David Jr
parsed = parsed.Where((source, index) => index != 3).ToArray();
EDIT 2:
Bitte ignorieren Sie diese Frage und las die genehmigte Antwort, ich missverstanden, wie Referenztypen arbeiten.
Mach dir einfach keine Sorgen. C# verfügt über eine automatische Speicherbereinigung. Lassen Sie den Sammler seine Arbeit machen und Sie können sich um etwas anderes sorgen. Ihre Überzeugung, dass das Komprimieren des Arrays den Wert Ihrer lokalen Variablen ändert, ist falsch. –
Woran denken Sie, dass 'name' nach dem Entfernen eines Elements aus dem Array null ist? 'name' interessiert nicht, was mit dem Array passiert - es enthält immer noch einen Verweis auf den String, dem Sie es zugewiesen haben. –
Nun, dann muss ich etwas falsch verstehen, wie Referenzen funktionieren, die Zeichenfolge wird auch dann noch existieren, wenn ich sie aus dem Array entferne? so weit ich weiß, würde es Müll gesammelt werden, weil keine anderen Referenzen darauf zeigen werden – user7386753