C #, Foreach пункт в - PullRequest
       3

C #, Foreach пункт в

4 голосов
/ 05 ноября 2010

У меня есть список, в котором находятся некоторые предметы.Предметы - это сетки, в которых размещены различные текстовые блоки, кнопки и т. Д. И т. Д.

foreach (Grid thisGrid in myListBox.SelectedItems)
                        {
                                foreach (TextBlock thisTextblock in thisGrid.Children)
                                {
                                     //Do Somthing
                                }
                        }

Тем не менее, это вызывает исключение, поскольку в нем есть и другие элементы, кроме текстовых.Как я могу приспособить это?Спасибо.

Ответы [ 4 ]

13 голосов
/ 05 ноября 2010

Когда я это читаю, проблема здесь в том, что внутренний цикл, и в Children есть вещи, которые не TextBlock с.

Если LINQ доступен:

foreach (TextBlock thisTextblock in thisGrid.Children.OfType<TextBlock>()) {
    // ... do something here
}

в противном случае:

foreach (object child in thisGrid.Children) {
    TextBlock thisTextblock = child as TextBlock;
    if(thisTextblock  == null) continue;
    // ... do something here
}
3 голосов
/ 05 ноября 2010

вы можете попробовать

foreach (TextBlock thisTextblock in thisGrid.Children.Where(c => c is TextBlock))
{ /* ... */ }

для вашего внутреннего цикла.

РЕДАКТИРОВАТЬ : TIL, что это также можно записать как:

foreach (TextBlock in thisTextblock in thisGrid.Children.OfType<TextBlock>());
0 голосов
/ 19 мая 2016

Если LINQ доступен, попробуйте:

thisGrid.Children.OfType<TextBlock>().ToList().ForEach(tb =>
{
...your code here
});
0 голосов
/ 05 ноября 2010
foreach (var thisTextblock in thisGrid.Children)
                            {
                                 if(thisTextblock is Textblock)
                                     //Do Somthing
                            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...