【问题标题】:C# Skip foreach loop when exception异常时C#跳过foreach循环
【发布时间】:2014-03-12 06:33:12
【问题描述】:

ListItems 有一项总是给出类型不匹配异常。代码行“ListItems 中的 MyItem 项”导致引发异常,因为 Listitems 和 MyItem 之间存在某种类型不匹配。如何忽略类型不匹配异常并移至下一个元素。如果它进入 foreach 循环,我可以使用“继续”。但是代码甚至没有进入for each循环

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

【问题讨论】:

    标签: c# foreach


    【解决方案1】:

    我建议使用IEnumerable.OfType。这就像对每个项目使用is MyItem 测试,并且只选择 - 并因此循环 - 此类测试为真的项目。 (它实际上也执行了强制转换,以确保例外的结果序列类型,但前提是它可以。)

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

    另一方面,原始代码就像对每个项目直接进行(MyItem) 强制转换,可能会因InvalidCastException 而失败。

    【讨论】:

      【解决方案2】:

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

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

      这将过滤您的列表并仅返回其中派生自 MyItem 的项目

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-08
        • 2021-02-25
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        相关资源
        最近更新 更多