2013-10-08 134 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()); 
     } 
    } 
} 

这样的代码会给你收集和灵活性的好处(对例如:你可以轻松地转换为数组)