繁体   English   中英

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

[英]C# - Use OfType and ignore inherited classes

我有一个包含很多项目的MenuStrip,并且试图让它们全部都订阅,所以我试图做menuStrip1.Items.OfType<ToolStripMenuItem>(); 而对于每个我,我都会这样做:

menuitem.Click += new EventHandler(MenuItem_Click);

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

如何在我的OfType方法中不包含这些内容?

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

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

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

可能是这样的:

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

因为您不需要隐式强制类型转换和比较(OfType),因此与Cast相比,显式强制类型转换基本上要慢于显式强制类型转换

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM