2017-06-06 94 views
-1

我有以下代碼:在一個字符串生成器對象改變整個字符串

using System; 
using System.Text; 

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

是存在的entirly替換字符串生成器的字符串的任何其他方式,我期待做的一個句子的方式它是否存在。

+3

用'.Clear();'清除它有什麼問題? - 一行請求'mystrb.Clear()。Append(「chau」);' –

+0

也是這樣做的方法:) – Limbo

+1

一句=一行? – fubo

回答

1

最好的選擇是不用默認實例化。由於您立即將其替換爲其他內容,請將其保留爲空(new StringBuilder())或爲空。

private static StringBuilder mystrb; 

如果過於簡化您的示例代碼,然後只需創建一個新的實例:

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

是的,我已經簡化了示例代碼 – Limbo

+0

然後只需創建一個新實例。 –

3

剛剛重新構建StringBuilder時出現了什麼問題?舊的只是垃圾收集。

mystrb = new StringBuilder("chau"); 
0

我想簡單地用一個新的覆蓋你的對象伊恩的解決方案是最佳的解決方案,但如果由於某種原因,你不喜歡,那麼你可以做這樣的事情:

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

我最初打算簡單地從StringBuilder對象和繼承dd新的Replace擴展方法,但由於某些原因,顯然該對象是sealed

所以,從技術上講,這將允許您用一行代替StringBuilder的內容,稍後使用StringBuilderReplaceText(myStringBuilder, "my new text");,但我真的不明白爲什麼要這樣做而不是僅僅重新使用構造函數。