Ich habe eine Klasse mit 3 String-Eigenschaften. Ich möchte diese in einer Liste speichern, so dass, wenn ich Änderungen an den Strings der Liste mache, sie auch in der Klasse aktualisiert werden.Speichern Sie einen Verweis auf eine Zeichenfolge
Das wäre leicht zu tun, wenn ich Klassenobjekt verwendet, aber String scheint sich anders zu verhalten. Es scheint eine Kopie des Objekts für die Liste zu erstellen, anstatt einen Zeiger auf das Objekt zu haben. Wie soll ich das machen C#? Wenn das nicht möglich ist, gibt es einen besseren Weg?
+1. StringBuilder tut bereits, was Sie wollen, erstellen Sie keine neue Klasse, es sei denn, die vorhandene Klasse funktioniert nicht. –
StringBuilder wird funktionieren, ist aber eine schlechte Wahl aus dem POV der Leistung. Die einzige Möglichkeit, den Wert einer Instanz zu ändern, besteht darin, sie zu löschen und die neue Zeichenfolge anzuhängen, bei der tatsächlich alle diese Bytes kopiert werden. Und wenn Sie sich die Interna ansehen, sehen Sie, dass es beim ersten Aufruf von ToString eine zweite Kopie erstellt. Da das Ändern mehr als das Zurücksetzen eines Zeigers erfordert, kann es auch nicht atomar sein, so dass es möglicherweise Probleme mit der Thread-Sicherheit gibt. –
@Steven, bitte besorgen Sie sich einige Beweise für diese Behauptung. Meine StringBuilder-Tests zeigen nur die geänderten/ersetzten/angehängten Bytes, die sich ändern, nicht "all diese Bytes". Sehr wenige String-Manipulationen beinhalten lediglich das "Ändern eines Zeigers"; Keine der anderen vorgeschlagenen veränderbaren String-Klassen tun dies, noch sind sie atomar. Alle anderen Vorschläge beinhalten das Erstellen einer neuen Zeichenfolge. –