C#异常时跳过foreach循环

时间:2014-03-12 06:33:13

标签: c# foreach

ListItems有一个项目总是给出类型不匹配异常。由于Listitems和MyItem之间存在某些类型不匹配,代码行'ListItems中的MyItem项'会引发异常。如何忽略类型不匹配异常并移至下一个元素。如果它进入foreach循环内部,我可以使用'continue'。但是代码甚至没有进入每个循环

foreach (MyItem items in ListItems)
{
   ...Do...
}

2 个答案:

答案 0 :(得分:6)

我建议使用IEnumerable.OfType。这就像对每个项目使用is MyItem测试一样,只选择 - 然后循环 - 这样的测试成立的项目。 (它实际上也执行强制转换,它确保了例外的结果序列类型,但只有当可以时。)

foreach (var items in ListItems.OfType<MyItem>()) {
   // items not "of" MyItem will be skipped
}

另一方面,原始代码就像是对每个项目进行直接(MyItem)投射,但可能会失败InvalidCastException

答案 1 :(得分:4)

您需要过滤掉,以便只处理MyItem个项目。请务必包含System.Linq命名空间并执行

foreach (MyItem items in ListItems.OfType<MyItem>())
{
   ...Do...
}

这将过滤您的列表,只返回源自MyItem

的项目