2010-07-22 10 views
14
someString[someRandomIdx] = 'g'; 

das gibt mir einen Fehler,Wie setze ich ein Zeichen in einem Index in einem String in C#?

wie kann ich die oben erreichen?

Edit:

ja, es ist vom Typ ‚string‘

+0

http://msdn.microsoft.com/ de-de/library/system.string.insert.aspx –

+0

Immutabilität ist ein mächtiges Werkzeug. – Dykam

+0

mögliches Duplikat von [Ersetzen eines Zeichens bei einem gegebenen Index in einer Zeichenkette?] (Http://stackoverflow.com/questions/9367119/replacing-a-char-at-a-given-index-in-string) – psubsee2003

Antwort

27

Wenn es vom Typ string dann kann man nicht tun, weil Strings sind unveränderlich - sie können nicht geändert werden, sobald sie festgelegt sind .

Um das zu erreichen, was Sie wünschen, können Sie eine StringBuilder

StringBuilder someString = new StringBuilder("someString"); 

someString[4] = 'g'; 

aktualisieren

Warum ein string verwenden, anstelle eines StringBuilder? Aus vielen Gründen. Hier sind einige, die ich mir vorstellen kann:

  • Zugriff auf den Wert einer Zeichenfolge ist schneller.
  • Zeichenketten können interniert werden (dies geschieht nicht immer), so dass, wenn Sie eine Zeichenkette mit demselben Wert erstellen, kein zusätzlicher Speicher verwendet wird.
  • Strings sind unveränderlich, so dass sie in Hash-basierten Sammlungen besser funktionieren und inhärent Thread-sicher sind.
+0

was ist der Unterschied zwischen einer Zeichenfolge und einem StringBuilder? , warum würde ich StringBuilders nicht überall verwenden? – matt

+0

für weitere Informationen über die StringBuilder-Klasse: http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx –

27

C# -Strings sind unveränderlich. Sie sollten eine neue Zeichenfolge mit den geänderten Inhalten erstellen.

char[] charArr = someString.ToCharArray(); 
charArr[someRandomIdx] = 'g'; // freely modify the array 
someString = new string(charArr); // create a new string with array contents. 
2

Auschecken this article zum Ändern von Zeichenfolge Inhalt in C#. Strings sind unveränderlich, daher müssen sie in Zwischenobjekte konvertiert werden, bevor sie geändert werden können.

0

Sie können auch die Insert() - Methode z. somestring.Insert (Index, Daten)

3

Wenn Sie unbedingt die vorhandene Instanz einer Zeichenfolge ändern müssen, gibt es eine Möglichkeit mit unsicher Code:

 public static unsafe void ChangeCharInString(ref string str, char c, int index) 
     { 
      GCHandle handle; 
      try 
      { 
       handle = GCHandle.Alloc(str, GCHandleType.Pinned); 
       char* ptr = (char*)handle.AddrOfPinnedObject(); 
       ptr[index] = c; 
      } 
      finally 
      { 
       try 
       { 
        handle.Free(); 
       } 
       catch(InvalidOperationException) 
       { 
       } 
      } 
     } 
+0

Gut zu wissen, danke, aber bitte nicht so machen :) – Roberto

Verwandte Themen