在foreach循环中跳过特定类型的项

时间:2012-01-26 09:57:40

标签: c# .net loops foreach

我有这段代码用于从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);
}

当cell与我在表中设置的数据类型不同时,我遇到了问题。

如何跳过错误数据类型的单元格?

我也知道这一点,但在我的情况下我无法使其发挥作用:

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

3 个答案:

答案 0 :(得分:9)

您可以使用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类型的源

答案 1 :(得分:8)

C#有一个is运营商。

例如:

foreach(var item in collection)
{
 if(item is string)
 {
   //Do something with the string.
 }
}

答案 2 :(得分:4)

使用is运算符:

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

is

  

检查对象是否与给定类型兼容。