StringBuilder.Chars[Int32] Property

Definition

Ottiene o imposta il carattere nella posizione del carattere specificata in questa istanza.Gets or sets the character at the specified character position in this instance.

public:
 property char default[int] { char get(int index); void set(int index, char value); };
public char this[int index] { get; set; }
member this.Chars(int) : char with get, set
Default Public Property Chars(index As Integer) As Char

Parameters

index
Int32

Posizione del carattere.The position of the character.

Property Value

Char

Carattere Unicode nella posizione index.The Unicode character at position index.

Exceptions

index non è compreso nei limiti dell'istanza durante l'impostazione di un carattere.index is outside the bounds of this instance while setting a character.

index non è compreso nei limiti dell'istanza durante l'ottenimento di un carattere.index is outside the bounds of this instance while getting a character.

Remarks

Il index parametro è la posizione di un carattere all'interno dell'StringBuilder.The index parameter is the position of a character within the StringBuilder. Il primo carattere della stringa è in corrispondenza dell'indice 0.The first character in the string is at index 0. La lunghezza di una stringa è il numero di caratteri in esso contenuti.The length of a string is the number of characters it contains. L'ultimo carattere accessibile di un'istanza di StringBuilder si trova in corrispondenza dell'indice Length-1.The last accessible character of a StringBuilder instance is at index Length - 1.

Chars[] è la proprietà predefinita della classe StringBuilder.Chars[] is the default property of the StringBuilder class. In C#è un indicizzatore.In C#, it is an indexer. Ciò significa che i singoli caratteri possono essere recuperati dalla proprietà Chars[] come illustrato nell'esempio seguente, che conta il numero di caratteri alfabetici, di spazi vuoti e di punteggiatura in una stringa.This means that individual characters can be retrieved from the Chars[] property as shown in the following example, which counts the number of alphabetic, white-space, and punctuation characters in a string.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      int nAlphabeticChars = 0;
      int nWhitespace = 0;
      int nPunctuation = 0;  
      StringBuilder sb = new StringBuilder("This is a simple sentence.");
      
      for (int ctr = 0; ctr < sb.Length; ctr++) {
         char ch = sb[ctr];
         if (Char.IsLetter(ch)) { nAlphabeticChars++;  continue; }
         if (Char.IsWhiteSpace(ch)) { nWhitespace++;  continue; }
         if (Char.IsPunctuation(ch)) nPunctuation++;  
      }    

      Console.WriteLine("The sentence '{0}' has:", sb);
      Console.WriteLine("   Alphabetic characters: {0}", nAlphabeticChars);
      Console.WriteLine("   White-space characters: {0}", nWhitespace);
      Console.WriteLine("   Punctuation characters: {0}", nPunctuation);
   }
}
// The example displays the following output:
//       The sentence 'This is a simple sentence.' has:
//          Alphabetic characters: 21
//          White-space characters: 4
//          Punctuation characters: 1
Imports System.Text

Module Example
   Public Sub Main()
      Dim nAlphabeticChars As Integer = 0
      Dim nWhitespace As Integer = 0
      Dim nPunctuation As Integer = 0  
      Dim sb As New StringBuilder("This is a simple sentence.")
      
      For ctr As Integer = 0 To sb.Length - 1
         Dim ch As Char = sb(ctr)
         If Char.IsLetter(ch) Then nAlphabeticChars += 1 : Continue For
         If Char.IsWhiteSpace(ch) Then nWhitespace += 1 : Continue For
         If Char.IsPunctuation(ch) Then nPunctuation += 1
      Next    

      Console.WriteLine("The sentence '{0}' has:", sb)
      Console.WriteLine("   Alphabetic characters: {0}", nAlphabeticChars)
      Console.WriteLine("   White-space characters: {0}", nWhitespace)
      Console.WriteLine("   Punctuation characters: {0}", nPunctuation)
   End Sub
End Module
' The example displays the following output:
'       The sentence 'This is a simple sentence.' has:
'          Alphabetic characters: 21
'          White-space characters: 4
'          Punctuation characters: 1

Indicizzazione basata su caratteri e prestazioniPerformance and character-based indexing

L'uso dell'indicizzazione basata sui caratteri con la proprietà Chars[] può essere lentissimo nelle condizioni seguenti:Using character-based indexing with the Chars[] property can be extremely slow under the following conditions:

L'impatto sulle prestazioni è notevole poiché ogni accesso ai caratteri scorre l'intero elenco di blocchi collegato per trovare il buffer corretto in cui eseguire l'indicizzazione.Performance is severely impacted because each character access walks the entire linked list of chunks to find the correct buffer to index into.

Note

Nel caso di un oggetto StringBuilder "pesante" e di grandi dimensioni, usare la proprietà Chars[] per eseguire l'accesso basato su indice a uno o un numero limitato di caratteri ha un impatto trascurabile sulle prestazioni, in genere è un'operazione 0(n) .Even for a large "chunky" StringBuilder object, using the Chars[] property for index-based access to one or a small number of characters has a negligible performance impact; typically, it is an 0(n) operation. L'impatto significativo sulle prestazioni si verifica durante l'iterazione dei caratteri nell'oggetto StringBuilder, che è un'operazione O(n^2) .The significant performance impact occurs when iterating the characters in the StringBuilder object, which is an O(n^2) operation.

Se si verificano problemi di prestazioni quando si usa l'indicizzazione basata su caratteri con gli oggetti StringBuilder, è possibile adottare una delle seguenti soluzioni alternative:If you encounter performance issues when using character-based indexing with StringBuilder objects, you can use any of the following workarounds:

  • Convertire l'istanza StringBuilder in un String chiamando il metodo ToString, quindi accedere ai caratteri nella stringa.Convert the StringBuilder instance to a String by calling the ToString method, then access the characters in the string.

  • Copiare il contenuto dell'oggetto StringBuilder esistente in un nuovo oggetto StringBuilder con dimensioni preimpostate.Copy the contents of the existing StringBuilder object to a new pre-sized StringBuilder object. Le prestazioni migliorano perché il nuovo oggetto StringBuilder non è pesante.Performance improves because the new StringBuilder object is not chunky. Ad esempio:For example:

    // sbOriginal is the existing StringBuilder object
    var sbNew = new StringBuilder(sbOriginal.ToString(), sbOriginal.Length);
    
    ' sbOriginal is the existing StringBuilder object
    Dim sbNew = New StringBuilder(sbOriginal.ToString(), sbOriginal.Length)
    
  • Impostare la capacità iniziale dell'oggetto StringBuilder su un valore approssimativamente uguale alle dimensioni massime previste chiamando il costruttore StringBuilder(Int32).Set the initial capacity of the StringBuilder object to a value that is approximately equal to its maximum expected size by calling the StringBuilder(Int32) constructor. Si noti che in questo modo viene allocato l'intero di memoria anche se StringBuilder raramente raggiunge la capacità massima.Note that this allocates the entire block of memory even if the StringBuilder rarely reaches its maximum capacity.

Applies to

See also