C# - Используйте OfType и проигнорируйте наследованные классы

У меня есть MenuStrip с большим количеством объектов, и пытаюсь иметь на событии, которое они все подписывают на то, таким образом, я пытаюсь сделать menuStrip1.Items.OfType<ToolStripMenuItem>(); и для каждого я делаю это:

menuitem.Click += new EventHandler(MenuItem_Click);

Проблема существует ToolStripSeperatorItem, который наследовался от ToolStripMenuItem, и это появляется, мой список объектов и ошибок, потому что он не имеет события Click.

Как я не могу включать их в свой метод OfType?

9
задан Jon 18 January 2010 в 16:10
поделиться

4 ответа

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

Кажется рода избыточным, но, делая обоих, вы поддерживаете тип возврата.

9
ответ дан 4 December 2019 в 15:18
поделиться
menuStrip1.Items.OfType<ToolStripMenuItem>()
                .Where(i => i.GetType() == typeof(ToolStripMenuItem))
3
ответ дан 4 December 2019 в 15:18
поделиться

Может быть, как это:

menuStrip1.Items
    .OfType<ToolStripMenuItem>()
    .Except(menuStrip1.Items.OfType<ToolStripSeparatorItem>())
1
ответ дан 4 December 2019 в 15:18
поделиться
menuStrip1.Items
 .Cast<ToolStripMenuItem>()
 .Where(i => i.GetType() == typeof(ToolStripSeparatorItem));

Потому что вам не нужно неявное кастинг и сравнение (OfType), которое в основном медленнее, чем явное кастинг с помощью Cast

.
0
ответ дан 4 December 2019 в 15:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: