C#是否可以创建动态StringBuilder数组

本文关键字:动态 StringBuilder 数组 创建 是否 | 更新日期: 2023-09-27 18:04:38

我正试图在C#中动态创建StringBuilder数组,但运气不佳。

我想根据给定的客户端数字向StringBuilder(sb(添加信息,该数字将根据我可能拥有的客户端数量而动态变化。我可能有2个,也可能有20个。在我的程序后期,sb将用于建立基于每个客户的报告。

例如,我有以下3个客户端:

    Client A = 0 
    Client B = 1
    Client C = 2

如果客户A报告他有8个苹果,我想将字符串"8个苹果"添加到sb[0]。

如果客户B报告他有3个桔子,我想给某人加上字符串"3个桔子"[1]。

以上只是我试图实现的想法的一个简单例子。事实上,我将向某人添加大量信息

我尝试了以下几项,但没有太大的运气让他们按照我预期或想要的方式工作。

StringBuilder[] sbFileError = new StringBuilder[clientCount];
List<StringBuilder> sbFileError = new List<StringBuilder>();

有什么想法吗?是否可以创建StringBuilder数组?

谢谢!

C#是否可以创建动态StringBuilder数组

您已经创建了上面的容器,但您需要用一些东西填充它们。例如:

StringBuilder[] sbFileError = new StringBuilder[clientCount];
for (int ix = 0;  ix < clientCount;  ++ix)
    sbFileError[ix] = new StringBuilder();

List<StringBuilder> sbFileError = new List<StringBuilder>();
for (int ix = 0;  ix < clientCount;  ++ix)
    sbFileError.Add(new StringBuilder());

创建数组是第一步,但这只会创建存储StringBuilders的位置。在这一点上,您实际上还没有实例化任何StringBuilder。你需要做这样的事情。。。。

StringBuilder[] sbFileError = new StringBuilder[clientCount];
for (int i = 0; i < sbFileError.Length; i++)
    sbFileError[i] = new StringBuilder();

我认为您缺少数组元素的实例化。此代码有效。

int clientCount = 3;
StringBuilder[] sbFileError = new StringBuilder[clientCount];
for(int i=0; i<clientCount; i++)
{
    sbFileError[i] = new StringBuilder();
}
sbFileError[1].Append("Hello World!");
List<StringBuilder> sbFileError = new List<StringBuilder>();

看起来还可以,但你必须填写:

for (int i = 0; i < numClients; i++)
   sbFileError.Add(new StringBuilder());

你也可以得到花式:

var items = Enumerable.Range(0, clientCount)
                      .Select(i => new StringBuilder());
var list = new List<StringBuilder>(items);

或缩短为:

var list = Enumerable.Range(0, clientCount)
                     .Select(i => new StringBuilder())
                     .ToList();

篮子里又多了一个鸡蛋。