2013-10-08 132 views
1

我正在使用c#在窗口應用程序中創建應用程序。我有一個字符串數組,它的值將在每個計時器滴答事件中更新。稍後,我必須將此數組轉換爲對象數組。我知道,如果我們多次修改字符串,創建新的字符串對象可能非常耗時,所以我想使用stringBuilder。創建字符串生成器而不是字符串數組

讓說,在計時器滴答事件:

for (int i = 0; i < 10; i++) 
    { 
    n[i] = i.ToString(); 
    } 

其中n是字符串數組,我想使用StringBuilder,而不是數組。 有可能嗎?我該怎麼做呢?我如何將stringBuilder類型轉換爲對象類型?

+0

如果你想轉換成一個對象數組,爲什麼你先轉換爲字符串?爲什麼不使用對象? –

+0

@MatthewWatson他意味着一個非原始的,非價值的(引用類型) –

回答

1

你不需要StringBuilder這裏。僅在多次處理(通常是串聯)單個字符串時纔會調用StringBuilder。你有許多小而無關的字符串。

你可能想要的是用List<string>替換數組string[]

+0

我必須多次調用這個字符串數組,程序會連續運行1-2天,並且每個計時器都會調用數組。 – mahua22

+0

你不'調用'字符串。如果代碼多次執行's + = ..;'多次,則使用SB。 –

+0

@ mahua22這沒什麼區別,你還是不需要一個StringBuilder。 –

1

您可以保留您的字符串數組並在循環中使用StringBuilder

var myValues = new String[100]; 

void tick() { 
var sb = new StringBuilder(); 

for (int i = 0; i < 10; i++){ 
    sb.append(i.ToString()); 
} 

myValues.add(sb.ToString()); 
} 

這將0到10範圍內的所有值添加到一個字符串中。我不知道你爲什麼需要這個,所以如果你想做一些不同的事情,你應該澄清。

0

你可以做這樣的事情

StringBuilder obj=new StringBuilder(); 

    for (int i = 0; i < 10; i++) 
     { 
      obj.append(i.ToString()); 
     } 
+0

它創建一個長長的字符串。我想將它作爲數組存儲。在每個計時器滴答聲中,每個索引的值都會改變。 – mahua22

0

這裏是不需要使用數組或StringBuilder和應該是足夠有效的,如果順序並不太大另一種方法:

string nums = String.Join("", Enumerable.Range(0, 10)); 

然而,string.Join是真正有效的,如果輸入的是已經數組。在這種情況下,它可能會更有效率使用StringBuilder

string nums = Enumerable.Range(0, 10) 
    .Aggregate(new StringBuilder(), (a, b) => a.Append(b)) 
    .ToString(); 
0

我會建議你使用代碼類似:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var dic = new Dictionary<int, StringBuilder>(); 

     //Initialize dictionary 
     for (int i = 0; i < 10; i++) 
     { 
      dic.Add(i, new StringBuilder()); 
     } 

     TimerElapsed(dic); 

     TimerElapsed(dic); 

     Process(dic.Values.ToArray()); 
    } 

    public static void Process(object[] objects) 
    { 
     //Do your processing 
    } 

    public static void TimerElapsed(IDictionary<int, StringBuilder> dic) 
    { 
     for (int i = 0; i < 10; i++) 
     { 
      dic[i].Append(i.ToString()); 
     } 
    } 
} 

這樣的代碼會給你收集和靈活性的好處(對例如:你可以輕鬆地轉換爲數組)