1

我正在使用 c# 在窗口应用程序中创建一个应用程序。我有一个字符串数组,它的值将在每个计时器滴答事件中更新。稍后,我必须将此数组转换为对象数组。我知道,如果我们多次修改字符串,创建新的字符串对象可能会很耗时。所以我想使用 stringBuilder。

比方说,在计时器滴答事件中:

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

其中 n 是字符串数组,我想使用 stringbuilder 而不是数组。可能吗?我该怎么做呢?如何将 stringBuilder 类型转换为对象类型?

4

5 回答 5

2

你不需要在StringBuilder这里。只有在多次处理(通常:连接)单个字符串时才调用 StringBuilder。您有许多小的且不相关的字符串。

您可能想要的是将数组替换string[]List<string>.

于 2013-10-08T07:41:48.763 回答
1

您可以保留字符串数组并StringBuilder在循环中使用 a 。

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 范围内的所有值添加到一个字符串中。我不知道你为什么需要这个,所以如果你想做一些不同的事情,你应该澄清。

于 2013-10-08T07:39:54.197 回答
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());
        }
    }
}

这样的代码将为您带来收集和灵活性的好处(例如:您可以轻松转换为数组)

于 2013-10-08T07:54:56.670 回答
0

你可以做这样的事情

 StringBuilder obj=new StringBuilder();

    for (int i = 0; i < 10; i++)
      {
          obj.append(i.ToString());
      }
于 2013-10-08T07:40:22.280 回答
0

这是另一种不需要使用数组的方法,或者StringBuilder如果序列不太大,它应该足够有效:

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

但是,string.Join如果输入已经是一个数组,则非常有效。在这种情况下,使用 a 可能真的更有效StringBuilder

string nums =  Enumerable.Range(0, 10)
    .Aggregate(new StringBuilder(), (a, b) => a.Append(b))
    .ToString();
于 2013-10-08T07:45:57.977 回答