2017-06-06 2 views
-1

je le code suivant:Modification de la chaîne entière dans un objet constructeur de chaîne

using System; 
using System.Text; 

public class Program 
{ 
    private static StringBuilder mystrb = new StringBuilder("hello"); 
    public static void Main() 
    { 
     mystrb.Clear(); 
     mystrb.Append("chau"); 
    } 
} 

est-il une autre façon de remplacer entirly la chaîne dans le générateur de chaîne, je suis à la recherche d'un moyen d'une phrase de faire si ça existe.

+3

Quel est le problème avec l'effacement avec '.Clear();'? - une ligne comme demandé 'mystrb.Clear(). Append (" chau ");' –

+0

aussi une façon de le faire :) – Limbo

+1

une phrase = une ligne? – fubo

Répondre

1

La meilleure option est de ne pas instancier du tout avec une valeur par défaut. Puisque vous le remplacez immédiatement par autre chose, laissez-le vide (new StringBuilder()) ou null.

private static StringBuilder mystrb; 

Si vous avez trop simplifié votre exemple de code, alors il suffit de créer une nouvelle instance:

mystrb = new StringBuilder("chau"); 
+0

Oui, j'ai trop simplifié l'exemple de code – Limbo

+0

Ensuite, il suffit de créer une nouvelle instance. –

3

Qu'est-ce qui ne va pas avec la reconstruction de StringBuilder? L'ancien sera juste ramassé.

mystrb = new StringBuilder("chau"); 
0

Je pense que la solution de Ian d'écraser simplement votre objet avec une nouvelle est la meilleure solution, mais si pour une raison quelconque vous ne l'aimez pas alors vous pourriez faire quelque chose comme ceci:

static void StringBuilderReplaceText(StringBuilder sb, string newText) 
{ 
    sb.Clear(); 
    sb.AppendLine(newText); 
} 

j'allais d'abord hériter simplement de l'objet StringBuilder et dd une nouvelle méthode d'extension Replace mais apparemment l'objet est sealed pour une raison quelconque. Donc, techniquement, cela vous permettrait de remplacer le contenu d'un StringBuilder par une seule ligne en utilisant plus tard StringBuilderReplaceText(myStringBuilder, "my new text"); mais je ne vois vraiment pas pourquoi vous feriez cela au lieu de simplement réutiliser le constructeur.