我有一个包含大量项目的MenuStrip,并且我试图参与他们所有订阅的活动,所以我正在尝试menuStrip1.Items.OfType<ToolStripMenuItem>();
并且每个人都这样做:
menuitem.Click += new EventHandler(MenuItem_Click);
问题是有一个ToolStripSeperatorItem继承了ToolStripMenuItem,它出现的是我的项目和错误列表,因为它没有Click事件。
我怎么能不在我的OfType方法中包含这些?
答案 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
显式转换更慢