Lambda .Where() expression to return selected/flagged objects
If you control the MenuItemDefinition class, why not just add a feature tag to it?

public class MenuItemDefinition
{
    public string MethodName { get; set; }
    public string Feature { get; set; }
}

// each instance
new MenuItemDefinition { MethodName = "NewWidget", Feature = "Widgets" }

// GetMenuItems():
return GetAllMenuItems().Where(m =&gt; FeatureIsEnabled(m.Feature));


If not, you could put them in a dictionary:

var items = new Dictionary&lt;string, MenuItemDefinition[]&gt; {
    { "Widgets", new[] {
        new MenuItemDefinition { MethodName = "NewWidget" },
        new MenuItemDefinition { MethodName = "DeleteWidget" }
    },
    { "Default", new[] {
        // ....
    }
}

return items.Where(pair =&gt; FeatureIsEnabled(pair.Key)).SelectMany(pair =&gt; pair.Value);


Or better yet, build the initial list based upon content in a dictionary. That way you don't run the risk of having typos in the switch or the initial setup:

var dict = new Dictionary&lt;string, string[]&gt; 
{
    { "Widgets", new[] { "NewWidget", "DeleteWidget" },
    { "Default", new[] { "..." }
    ...
}

var menuItems = dict
    .Where(p =&gt; FeatureIsEnabled(p.Key))
    .SelectMany(p =&gt; p.Value)
    .Select(mn =&gt; new MenuItemDefinition { MethodName = mn });

// GetMenuItems()
return menuItems; // :)