Как сделать StringBuilder пустым снова в.NET 3.5?

У меня есть цикл, где я создаю некоторую строковую стоимость на основе определенных условий. Я действительно помещал объект StringBuilder за пределами цикла и каждый раз, когда я ссорюсь в цикле, который я должен очистить, StringBuilder добавил значения для этой строки.

Как я очищаю их?

        StringBuilder sb = new StringBuilder();

        foreach (DataRow row in recipientsList.Rows)
        {
            sb.Length = 0;
            sb.Append("<ul>");
            if (row["needsToActivate"] == "1")
            {
                sb.AppendFormat("<li>{0}</li>", getUsersWithoutActivationTemplate());
            }
            if (row["needsToEnterSite"] == "1")
            {
                sb.AppendFormat("<li>{0}</li>", getUsersWithoutEnteringWebsiteForTwoWeeksTemplate());
            }
            if (row["needsPicture"] == "1")
            {
                sb.AppendFormat("<li>{0}</li>", getUsersWithoutPicturesTemplate());
            }
            if (row["needsText"] == "1")
            {
                sb.AppendFormat("<li>{0}</li>", getUsersWithoutTextTemplate());
            }
            if (row["needsCharacteristic"] == "1")
            {
                sb.AppendFormat("<li>{0}</li>", getUsersWithoutCharateristicsTemplate());
            }
            if (row["needsHobby"] == "1")
            {
                sb.AppendFormat("<li>{0}</li>", getUsersWithoutHobbiesTemplate());
            }
            sb.Append("</ul>");
}

Код с принятым ответом;

19
задан Răzvan Flavius Panda 24 January 2012 в 11:57
поделиться

5 ответов

Вы можете просто;

sb.Length = 0;
50
ответ дан 30 November 2019 в 01:59
поделиться

StringBuilder.Clear (); - это то, что вам нужно.

13
ответ дан 30 November 2019 в 01:59
поделиться

Установите длину равной 0 или в .Net 4. Я считаю, что вы можете вызвать новый метод Clear ().

4
ответ дан 30 November 2019 в 01:59
поделиться

Вы можете повторно использовать StringBuilder (с .Clear() или .Length = 0), но если вы действительно хотите оптимизировать, вам следует попытаться оценить конечную длину. Если она немного увеличивается с каждой итерацией, повторное использование может быть медленнее (использовать больше памяти), чем создание нового каждый раз.

foreach (DataRow row in recipientsList.Rows)
{
    int estimatedLength = 5000; // maybe a calculation based on row-data
    StringBuilder sb = new StringBuilder(estimatedLength);
    ....

}

Поэтому, хотя ответы здесь о том, как это сделать, верны, лучший совет - не делать этого . Это микрооптимизация, и вам не нужен очень маленький выигрыш здесь, и вам не нужны (небольшие) дополнительные сложности. Вы можете немного оптимизировать здесь, если результирующая строка очень большая, но, конечно, не делайте это привычкой.

3
ответ дан 30 November 2019 в 01:59
поделиться

Предположим, вы определяете свой StringBuilder следующим образом: StringBuilder sb = new StringBuilder ();

Вы можете сделать любое из следующего:

Вызвать метод Clear:

for (int i = 0; i < 100; i++)
{
    sb.Clear();
    .. your code here ..
}

Установить длину равной нулю:

for (int i = 0; i < 100; i++)
{
    sb.Length = 0;
    .. your code here ..
}

Установить новый объект:

for (int i = 0; i < 100; i++)
{
    sb = new StringBuilder();
    .. your code here ..
}
3
ответ дан 30 November 2019 в 01:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: