public static IEnumerable <Tuple <Enum, TExpected> > GetAttributeValues <T, TExpected>(this Enum enumeration, Func <T, TExpected> expression, Func <Enum, TExpected> notFound = null) where T : Attribute { var components = enumeration.Components(); return(components.Select(component => Tuple.Create(component, component.GetAttributeValue(expression, notFound)))); }