Пропускать элементы определенного типа в цикле foreach - PullRequest
8 голосов
/ 26 января 2012

У меня есть этот код для заполнения данных из файла Excel:

for (int rowIndex = cells.FirstRowIndex; rowIndex <= cells.LastRowIndex; rowIndex++)
{
    var values = new List<string>();
    foreach (var cell in cells.GetRow(rowIndex))
    {
        values.Add(cell.Value.StringValue);
    }
    dataTable.LoadDataRow(values.ToArray(), true);
}

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

Как пропустить ячейку с неправильным типом данных?

Я тоже это знаю, но не могу заставить ее работать в моем случае:

foreach //...
{
    if //if datatype is not right
    {
        continue;
    }
}

Ответы [ 3 ]

9 голосов
/ 26 января 2012

Вы можете использовать метод LINQ OfType<IMyType>() для фильтрации неправильных элементов:

// do not forget adding using System.Linq;
var filteredItems = items.OfType<IMyType>();
var values = new List<IMyType>(filteredItems); 

MSDN :

Фильтрует элементы на основе IEnumerableпо указанному типу.Метод OfType (IEnumerable) возвращает только те элементы в источнике, которые можно привести к типу TResult

8 голосов
/ 26 января 2012

C # имеет оператор is .

Например:

foreach(var item in collection)
{
 if(item is string)
 {
   //Do something with the string.
 }
}
4 голосов
/ 26 января 2012

Используйте оператор is:

if(cell is MyType)
{
  // can work
}

is:

Проверяет, совместим ли объект с данным типом.

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