WP7 цикл foreach для специалиста по обработке данных - PullRequest
0 голосов
/ 04 февраля 2012

У меня есть несколько циклов foreach друг за другом в более крупном цикле foreach. Я хочу добавить каждый набор проходов в источник данных / источник данных.

foreach (HtmlNode cell in cells3)
{
    Dispatcher.BeginInvoke(() => textBlock4.Text = cell.InnerText);
}

foreach (HtmlNode cell in cells)
{
    Dispatcher.BeginInvoke(() => textBlock5.Text = cell.InnerText);
}

foreach (HtmlNode cell in cells2)
{
    Dispatcher.BeginInvoke(() => textBlock6.Text = cell.InnerText);
}

Мой текущий код проходит и выводит результаты в текстовые блоки, но переопределяет друг друга, поэтому отображает только последний результат. Поэтому мне как-то нужно добавить их в переменные или список данных, чтобы отобразить их отдельно в списке.

Заранее спасибо!

1 Ответ

2 голосов
/ 04 февраля 2012

Вместо того, чтобы перезаписывать текст следующим образом:

textBlock4.Text = cell.InnerText

вы можете добавить это, как это:

textBlock4.Text += cell.InnerText

Лучшим (и более быстрым, поскольку он не использует медленную систему DependencyProperty как чрезмерную, а также освобождает диспетчер) подход будет заключаться в агрегировании текста в StringBuilder и назначении его впоследствии, например:

StringBuilder sb = new StringBuilder();
foreach (HtmlNode cell in cells3)
{
    sb.AppendLine(cell.InnerText);
}
Dispatcher.BeginInvoke(() => textBlock4.Text = sb.ToString());
sb.Clear();

// reuse sb for the following loops as shown above

Вы также можете использовать LINQ, что сделает все немного короче:

StringBuilder sb = cells3.Aggregate(
    new StringBuilder(),
    (sb, cell) => sb.AppendLine(cell.InnerText));

Dispatcher.BeginInvoke(() => textBlock4.Text = sb.ToString());
...