Возможно ли создание динамического массива StringBuilder? - PullRequest
1 голос
/ 04 августа 2011

Я пытаюсь динамически создать массив StringBuilder в C #, и мне не очень повезло.

Я хочу добавить информацию в StringBuilder (sb) на основе заданной клиентской цифры, которая изменитсядинамически в зависимости от того, сколько клиентов у меня может быть.У меня может быть 2 или у меня может быть 20. Sb будет использоваться для создания отчета на основе клиента позже в моей программе.

Например, у меня есть следующие 3 клиента:

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

Если клиент А сообщает, что у него 8 яблок, я хочу добавить строку "8 яблок" в sb [0].

Если клиент B сообщает, что у него есть 3 апельсина, я хочу добавить строку «3 апельсина» в sb [1].

Выше приведен простой пример идеи, которую я пытаюсьвыполнить.На самом деле я собираюсь добавить много информации в sb.

Я попробовал следующее без особой удачи, заставляя их работать так, как я ожидал или хотел.

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

Какие-нибудь мысли?Можно ли создать массив StringBuilder?

Спасибо!

Ответы [ 5 ]

8 голосов
/ 04 августа 2011

Вы создали контейнеры выше, но вам нужно заполнить их чем-нибудь. Например:

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());
3 голосов
/ 04 августа 2011

Создание массива - это первый шаг, но он создает только места для хранения StringBuilders. На данный момент вы не создали ни одного экземпляра StringBuilders. Вам нужно будет сделать что-то вроде этого ...

StringBuilder[] sbFileError = new StringBuilder[clientCount];
for (int i = 0; i < sbFileError.Length; i++)
    sbFileError[i] = new StringBuilder();
2 голосов
/ 04 августа 2011

Я думаю, вам не хватает экземпляров элементов массива.Этот код работает.

int clientCount = 3;
StringBuilder[] sbFileError = new StringBuilder[clientCount];
for(int i=0; i<clientCount; i++)
{
    sbFileError[i] = new StringBuilder();
}

sbFileError[1].Append("Hello World!");
1 голос
/ 04 августа 2011

Вы также можете получить фантазию:

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();

Просто еще одно яйцо в корзине.

1 голос
/ 04 августа 2011
List<StringBuilder> sbFileError = new List<StringBuilder>();

выглядит хорошо, но вы должны заполнить его:

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