[英]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.