C# - 使用OfType并忽略继承的类

时间:2010-01-18 16:10:36

标签: c# linq generics c#-3.0

我有一个包含大量项目的MenuStrip,并且我试图参与他们所有订阅的活动,所以我正在尝试menuStrip1.Items.OfType<ToolStripMenuItem>();并且每个人都这样做:

menuitem.Click += new EventHandler(MenuItem_Click);

问题是有一个ToolStripSeperatorItem继承了ToolStripMenuItem,它出现的是我的项目和错误列表,因为它没有Click事件。

我怎么能不在我的OfType方法中包含这些?

4 个答案:

答案 0 :(得分:8)

menuStrip1.Items.OfType<ToolStripMenuItem>().Where(it => it.GetType() == typeof(ToolStripMenuItem));

这似乎有点多余,但通过同时执行这两种操作,您可以维护返回类型。

答案 1 :(得分:3)

menuStrip1.Items.OfType<ToolStripMenuItem>()
                .Where(i => i.GetType() == typeof(ToolStripMenuItem))

答案 2 :(得分:1)

也许是这样的:

menuStrip1.Items
    .OfType<ToolStripMenuItem>()
    .Except(menuStrip1.Items.OfType<ToolStripSeparatorItem>())

答案 3 :(得分:0)

menuStrip1.Items
 .Cast<ToolStripMenuItem>()
 .Where(i => i.GetType() == typeof(ToolStripSeparatorItem));

因为你不需要一个隐式的强制转换和比较(OfType),它基本上比使用Cast

显式转换更慢