2014-10-08 163 views
-2

我想在c#中的一個新類中創建一個字符串生成器,因爲我有很多字符串(超過7000個)要替換。做同樣的形式可能會加載問題,所以我想創建一個新的類,我可以寫字符串生成器代碼,但無法做到這一點。我嘗試下面的代碼在一個新類中創建一個字符串生成器

class v 
    { 
     StringBuilder _sb = new StringBuilder(); 

     public v(StringBuilder sb) 
     { 
      sb.Replace("s", "A"); 
      sb.Replace("hi", "hello"); 
     } 
    } 

我的按鈕代碼:

StringBuilder _sb = new StringBuilder(c1Editor1.Text); 
_sb.v(C1Editor.text); 
+2

將'StringBuilder'移動到另一個類並像使用第二個代碼片段一樣使用它,對性能沒有任何好處。您必須將繁重的舉措移至另一個線程,例如通過使用後臺工作者。所有這些,你能詳細闡述一下你試圖達到的目標嗎? – venerik 2014-10-08 05:12:42

+0

嗨,Venerik,我想在一個新類中使用字符串生成器 – verena 2014-10-08 05:55:50

回答

2
class v 
{ 
    StringBuilder _sb; 

    public v(StringBuilder sb) 
    { 
     _sb = sb; 
     sb.Replace("s", "A"); 
     sb.Replace("hi", "hello"); 
    } 
} 

然後:

StringBuilder _sb = new StringBuilder(c1Editor1.Text); 
v _v = new v(_sb); 

不,我一定認爲這是很好的代碼,但是這將實現你在做什麼。

+0

看完你的代碼後,我明白了op的問題! +1 from me :) – mybirthname 2014-10-08 05:11:17

+0

我仍然不確定OP需要什麼,但是如果構造函數替換'_sb'而不是'sb'上的文本,或者'_sb = sb'做出引用而不是深度複製無論如何? – IllusiveBrian 2014-10-08 05:15:22

+0

@Namfuak,'StringBuilder'是一個類,因此是一個引用類型,因此只有一個'StringBuilder'。 – jmcilhinney 2014-10-08 05:58:36

1

如果你想改變你自己的字符串的文本,那麼這個呢?

1.創建StringBuilder的處理程序

public static class StringHelper 
{ 
    public static void v(this StringBuilder sb) 
    { 
     sb.Replace("s", "A"); 
     sb.Replace("hi", "hello"); 
    } 
} 

在你的代碼

StringBuilder sb = new StringBuilder(c1Editor1.Text); 
sb.v(); 
0

2.用戶處理程序類,這裏是你如何能做到這一點。

private void button1_Click(object sender, EventArgs e) 
{ 
    // instead of changing the cursor you could disable the textbox 
    this.UseWaitCursor = true; 
    backgroundWorker1.DoWork += Replacer; 
    backgroundWorker1.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted; 
    backgroundWorker1.RunWorkerAsync(textBox1.Text); 
} 

private void Replacer(object sender, DoWorkEventArgs doWorkEventArgs) 
{ 
    var replacer = new StringBuilder((String)doWorkEventArgs.Argument); 
    replacer.Replace("s", "A"); 
    replacer.Replace("hi", "hello"); 
    // add other 6998 replacements here and remove the sleep of course 
    Thread.Sleep(5000); 
    doWorkEventArgs.Result = replacer.ToString(); 
} 

void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    textBox1.Text = (string) e.Result; 
    // instead of changing the cursor you could enable the textbox here 
    this.UseWaitCursor = false; 
} 

好運氣:用TextBox稱爲textBox1,一個名爲Buttonbutton1一個名爲backgroundWorker1BackgroundWorker表單中的代碼粘貼。

+0

謝謝@ Venerik,但我認爲我給了你錯誤的闡述,因爲我需要做的是當我點擊按鈕時,所有的「s」都應該用「A」替換,使用stringBuilder.replace(「s」,「A」 );等等..這個實現代碼應該發生在一個新的類(讓說V.cs)。所以你的幫助意味着我很多。 – verena 2014-10-08 07:27:32

+0

我能夠通過使用下面的代碼看到替換arein messagebox形式:// code for v.cs class v {private StringBuilder _sb; public v(StringBuilder _sb1){this._sb = _sb1; _sb.Replace(「s」,「A」); _sb.Replace(「hi」,「hello」); MessageBox.Show(「Text hasbeen changed」+ _sb)} //代碼爲按鈕:StringBuilder _sb1 = new StringBuilder(c1Editor1.Text); v _sb = new v(_sb1);}但是我希望看到編輯器本身的文本更改說C1Editor1。你的幫助最受讚賞。 – verena 2014-10-08 09:32:27

+0

爲什麼你想創建一個新班級。除非你試圖實現你還沒有提到的東西,否則它是沒有意義的。 – venerik 2014-10-08 10:17:21

相關問題