2015-05-07 3 views
1

У меня есть коллекция, которая хранит множество типов объектов, текстовое поле и TextBlock, которые я объявляющие, как это:Как получить объекты определенного типа из списка объектов

List<object> textBoxCollection= new List<object>(); 

Однако, когда я бегу foreach loop, который ищет только объект Textbox, он выдает недопустимое исключение. Моя проверка цикла foreach заключается в том, что он выполнит только операцию над типом объекта, который я вызвал. Где я иду не так? Heres мой цикл:

foreach (MyTextBox mtb in textBoxCollection) 
{ 

    int number 
    bool mybool = Int32.TryParse(mtb.Text, out number); 

    if (mybool == false) 
    { 
     //some operation 
    } 
    else 
    { 
     //some other operation 
    } 
} 

ответ

11

Вы должны сузить перечень только правильного типа с использованием OfType<T>()

foreach (MyTextBox mtb in textBoxCollection.OfType<MyTextBox>()) 
{ ... } 
+0

безупречный..thanks! – Ricardinho

1

Вы можете проверить тип объекта, используя is заявление:

foreach (object tmp in textBoxCollection) 
    { 

     if(tmp is MyTextBox) { 
      MyTextBox mtb = (MyTextBox)tmp; 
      int number 
      bool mybool = Int32.TryParse(mtb.Text, out number); 

      if (mybool == false) 
      { 
       //some operation 
      } 
      else 
      { 

       //some other operation 
      } 
     } 
    } 

или аналогичный выписка as:

foreach (object tmp in textBoxCollection) 
    { 
     MyTextBox mtb = tmp as MyTextBox; 
     if(mtb != null) { 
     ....... 
     } 
    } 
+1

Используйте это, если вы хотите обрабатывать все типы в «List» разными способами. – anothershrubery

+0

спасибо всем - это действительно помогло! – Ricardinho

Смежные вопросы