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

el *_*nho 8 .net c# foreach loops

我有这个代码从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);
}
Run Code Online (Sandbox Code Playgroud)

当cell与我在表中设置的数据类型不同时,我有问题.

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

我也知道这一点,但我不能在我的情况下使它工作:

foreach //...
{
    if //if datatype is not right
    {
        continue;
    }
}
Run Code Online (Sandbox Code Playgroud)

sll*_*sll 9

您可以使用LINQ OfType<IMyType>()方法过滤掉错误的项目:

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

MSDN:

根据指定的类型过滤IEnumerable的元素.OfType(IEnumerable)方法仅返回源中可以强制转换为TResult类型的元素

  • 你不能.你会得到一个InvalidCastException (2认同)

TJH*_*vel 8

C#有一个is运算符.

例如:

foreach(var item in collection)
{
 if(item is string)
 {
   //Do something with the string.
 }
}
Run Code Online (Sandbox Code Playgroud)

  • 你不能.如果除迭代以外的任何内容,您将获得InvalidCastException (6认同)