2017-06-06 74 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");,但我真的不明白为什么要这样做而不是仅仅重新使用构造函数。