public static IReadOnlyCollection <IFilteredTemplateInfo> FilterTemplates(IReadOnlyList <ITemplateInfo> templateList, bool exactMatchesOnly, params Func <ITemplateInfo, MatchInfo?>[] filters) { HashSet <IFilteredTemplateInfo> matchingTemplates = new HashSet <IFilteredTemplateInfo>(FilteredTemplateEqualityComparer.Default); foreach (ITemplateInfo template in templateList) { List <MatchInfo> matchInformation = new List <MatchInfo>(); foreach (Func <ITemplateInfo, MatchInfo?> filter in filters) { MatchInfo?result = filter(template); if (result.HasValue) { matchInformation.Add(result.Value); } } FilteredTemplateInfo info = new FilteredTemplateInfo(template, matchInformation); if (info.IsMatch || (!exactMatchesOnly && info.IsPartialMatch)) { matchingTemplates.Add(info); } } #if !NET45 return(matchingTemplates); #else return(matchingTemplates.ToList()); #endif }
public IReadOnlyCollection <IFilteredTemplateInfo> List(bool exactMatchesOnly, params Func <ITemplateInfo, string, MatchInfo?>[] filters) { HashSet <IFilteredTemplateInfo> matchingTemplates = new HashSet <IFilteredTemplateInfo>(FilteredTemplateEqualityComparer.Default); HashSet <ITemplateInfo> allTemplates = new HashSet <ITemplateInfo>(TemplateEqualityComparer.Default); using (Timing.Over("load")) { _environmentSettings.SettingsLoader.GetTemplates(allTemplates); } foreach (ITemplateInfo template in allTemplates) { string alias = _aliasRegistry.GetAliasForTemplate(template); List <MatchInfo> matchInformation = new List <MatchInfo>(); foreach (Func <ITemplateInfo, string, MatchInfo?> filter in filters) { MatchInfo?result = filter(template, alias); if (result.HasValue) { matchInformation.Add(result.Value); } } FilteredTemplateInfo info = new FilteredTemplateInfo(template, matchInformation); if (info.IsMatch || (!exactMatchesOnly && info.IsPartialMatch)) { matchingTemplates.Add(info); } } #if !NET45 return(matchingTemplates); #else return(matchingTemplates.ToList()); #endif }