код не вставляет все элементы массива в строку - PullRequest
2 голосов
/ 13 декабря 2010

У меня есть этот код, который должен вставить все элементы массива, который представляет собой HTML в случайных местах в строке.но он вставляет только последний элемент в эту строку.пожалуйста помоги

Random insertPos = new Random();
int pos = insertPos.Next(txtInput.Text.Length);
int firSpace= txtInput.Text.IndexOf(" ", pos);
int secSpace = txtInput.Text.IndexOf(" ", firSpace+1);
int wLen = secSpace - firSpace;<br/>
string word = txtInput.Text.Substring(firSpace,wLen);
foreach (string url in urlArray)
{
    txtOutput.Text = 
         txtInput.Text.Replace(word, "<a href=\"" + url + "\">" + word + "</a>");
}

Ответы [ 4 ]

2 голосов
/ 13 декабря 2010

Вы заменяете (=) содержимое txtOutput.Text на каждой итерации, поэтому, конечно, вы увидите только последний результат. Попробуйте сначала использовать += 1 , а затем StringBuilder, если ваша производительность страдает и это узкое место.

1 : Непонятно, как именно вы хотите его отформатировать, но, по крайней мере, += добавит и назначит результат добавления, а не просто результат текущей итерации.

1 голос
/ 13 декабря 2010

Вы постоянно говорите: «выясните, что происходит, когда я вставляю HTML-код в текст txtInput, и присваиваю результат тексту txtOutput». Но это на самом деле не меняет текст в txtInput, поэтому вы начинаете каждый раз заново; и вы каждый раз выбрасываете текст txtOutput, чтобы заменить его новым.

1 голос
/ 13 декабря 2010

Вы перезаписываете свойство Text текстового поля на каждом шаге цикла foreach. Будет оставлен только результат последнего цикла.

0 голосов
/ 13 декабря 2010

Как сказал Джейсон, вы используете = вместо +=, но есть лучшие решения.Помните, что строки неизменны .Используйте string.Format или StringBuilder, где вы объединяете строки.Примеры:

string[] strArray = {"a", "b", "c"};
string word = "word";

//1st solution +=
string output = "";

foreach (string str in strArray)
    output += "<a href=\"" + str + "\">" + word + "</a>";

Console.WriteLine(output);

//better solution string.Format
output = "";

foreach (string str in strArray)            
    output += string.Format("<a href=\"{0}\">{1}</a>", str, word);

Console.WriteLine(output);

//StringBuilder
StringBuilder sb = new StringBuilder();

foreach (string str in strArray)            
    sb.AppendFormat("<a href=\"{0}\">{1}</a>", str, word);

output = sb.ToString();

Console.WriteLine(output);

//linq & string.Join
output = string.Join("", strArray.Select( str => string.Format("<a href=\"{0}\">{1}</a>", str, word)).ToArray());

Console.WriteLine(output);

Console.Read();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...