protected virtual Option <IMenuModel> CreateItem(object item, Option <IMenuModel> parent) { Ensure.That(item, nameof(item)).IsNotNull(); var label = Optional(item) .Bind(c => Renderers.Find(r => r.CanRender(c)).Map(r => r.Render(c))) .HeadOrNone(); return(label.Map <IMenuModel>(v => new MenuModel(v.Key, v.DisplayName, item, parent))); }