2014-03-12 71 views
0

ListItems有一个总是给出类型不匹配异常的项。代码行'ListItems中的MyItem项目'会导致引发异常,因为Listitems和MyItem之间存在某种类型的不匹配。如何忽略类型不匹配例外并移至下一个元素。如果它会进入foreach循环,我可以使用'continue'。但代码甚至不输入每个循环C#在异常时跳过foreach循环

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

回答

4

您需要过滤掉所以只处理MyItem项目。一定要包括System.Linq命名空间和做

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

这将过滤列表,并且只返回它从MyItem

6

我会推荐使用IEnumerable.OfType。这就像对每个项目使用is MyItem测试,并且只选择 - 并因此循环 - 测试为真的项目。 (它实际上还执行铸造,这确保了例外结果序列类型,但只有当它可以。)

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

在另一方面,原来的代码是这样一个直接(MyItem)铸造上的每个项目,这可能会导致InvalidCastException失败。

+1

非常感谢得到的项目。我不知道OfType的命令 – michael