2010-11-05 43 views
4

我有一個Listbox,它包含一些項目。該項目是其中容納了各種的TextBlocks,按鈕,等等等等C#,Foreach項目

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

但是因爲有其他的項目比文字塊的在那裏,這將引發異常電網。我如何適應這個?謝謝。

+0

的問題是,'foreach'沒有按't *過濾所有的TextBlocks,但是它把每個孩子當作是一個TextBlock(帶有一個強制轉換) - 並且在你的情況下顯然是不正確的。 – 2010-11-05 08:20:49

回答

13

正如我所讀到的,這裏的問題是內部循環,並且有Children不是TextBlock s。

如果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 
} 
+0

謝謝。這很好!感謝所有貢獻的人。 – turtlepower 2010-11-05 08:17:56

3

你可以嘗試

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

您的內環。

編輯:TIL,這也可以寫成:

foreach (TextBlock in thisTextblock in thisGrid.Children.OfType<TextBlock>()); 
0
foreach (var thisTextblock in thisGrid.Children) 
          { 
           if(thisTextblock is Textblock) 
            //Do Somthing 
          } 
0

如果LINQ可以嘗試:

thisGrid.Children.OfType<TextBlock>().ToList().ForEach(tb => 
{ 
...your code here 
});