private Rule FindRule(StringBuilder data) { switch (RuleSelectionPolicy) { case RuleSelectionPolicies.Ascending: foreach (Rule rule in Rules) { if (data.ToString().IndexOf(rule.Original, StringComparison.InvariantCultureIgnoreCase) >= 0) { return(rule); } } break; case RuleSelectionPolicies.Descending: foreach (Rule rule in Rules.AsEnumerable().Reverse()) { if (data.ToString().IndexOf(rule.Original, StringComparison.InvariantCultureIgnoreCase) >= 0) { return(rule); } } break; case RuleSelectionPolicies.Random: { List <Rule> matchingRules = new List <Rule>(); foreach (Rule rule in Rules) { if (data.ToString().IndexOf(rule.Original, StringComparison.InvariantCultureIgnoreCase) >= 0) { matchingRules.Add(rule); } } if (matchingRules.Count > 0) { return(matchingRules[Rng.Next(matchingRules.Count)]); } break; } } return(null); }