У меня есть 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
.