Почему этот цикл C # над списком строк является странным? - PullRequest
0 голосов
/ 20 ноября 2010

Я не считаю себя величайшим разработчиком в мире, но я подумал, что могу хотя бы просмотреть список строк!

Вот моя функция:

    public string liststrings() {

        List<string> strings = new List<string>();
        strings.Add("First");
        strings.Add("Second");
        strings.Add("Third");

        string output = string.Empty;

        for (int i = 0; i < strings.Count(); i++ )
        {
            output += output + strings[i] + "<br />";
        }

        return output;
    }

Эта функция возвращает следующий HTML-код:

First<br />
First<br />
Second<br />
First<br />
First<br />
Second<br />
Third<br />

Откуда берутся дополнительные итерации?

К вашему сведению: я пришел в основном из сценариев VB, и я могу сделать это с помощью массива в VB script без проблем. Что отличается от списков или синтаксиса C #, которые запутывают это?

Спасибо за любую помощь.

Ответы [ 5 ]

7 голосов
/ 20 ноября 2010

Вы добавляете всю строку обратно к себе на каждой итерации, попробуйте следующее:

output += strings[i] + "<br />";
7 голосов
/ 20 ноября 2010

Вы добавляете вывод дважды.

output += output + strings[i] + "<br />";

эквивалентно:

output = output + output + strings[i] + "<br />";

Вы можете использовать:

output += strings[i] + "<br />";

Лучшим вариантом может быть StringBuilder.

2 голосов
/ 20 ноября 2010

Дополнительные итерации происходят из-за того, что вы добавляете предыдущее значение вывода к себе дважды.

output += output + strings[i] + "<br />";

Я думаю, что вы хотите

output = output + strings[i] + "<br />";

или

output += strings[i] + "<br />";

Но, честно говоря, из того, что вы делаете, я бы посмотрел на StringBuilder класс.

1 голос
/ 20 ноября 2010

Рекомендуется использовать объект StringBuilder вместо объединения строк.

...
StringBuilder sb = new StringBuilder();
for( int i = 0; i < strings.Length; i++)
{
    sb.WriteLine("{0}<br />", strings[i]);
}
return sb.ToString();

Обратите внимание на использование свойства .Length для чистых массивов, поскольку оно быстрее.

0 голосов
/ 20 ноября 2010

Вы должны удалить () после strings.Count. Также вы можете использовать

foreach(string str in strings)
{
    // etc.
}

Также, как упоминалось в других постах, вы добавляете вывод дважды:

output += output + "something"

эквивалентно

output = output + output + "something"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...