Получение контекстных меню из формы


У меня есть следующий код, который является частным методом в форме и извлечь все контекстные меню из формы. Я чувствую, что это не так сжато, как это должно быть. Будем благодарны за любые предложения.

  private IEnumerable<ContextMenuStrip> GetContextMenus()
    {
        var type = this.GetType();
        var fields = type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
        var contextMenus = fields.Where(f => f.GetValue(this).GetType() == typeof(ContextMenuStrip));
        var menus = contextMenus.Select(f=> f.GetValue(this));
        return menus.Cast<ContextMenuStrip>();        
    }


768
3
задан 2 марта 2011 в 11:03 Источник Поделиться
Комментарии
1 ответ

Я не могу представить, почему вы делаете это через отражения, я считаю, то же самое можно сделать, пройдя контролирует дерево. Ваш способ не будет работать, если контекстное меню имеет свойство генерировать члена значение ложь в конструкторе.

var contextMenus = fields.Where(f => f.GetValue(this).GetType() == typeof(ContextMenuStrip));
var menus = contextMenus.Select(f=> f.GetValue(this));
return menus.Cast<ContextMenuStrip>();

Можно заменить:

return fields.Select(f => f.GetValue(this)).OfType<ContextMenuStrip>();

2
ответ дан 2 марта 2011 в 11:03 Источник Поделиться