I can't see any way it would break existing code. The basic detection logic in RecursionGuard is changed from previousVisited.Any(match current) to previous.Visited.Count(match current) >= 1 (for the default cause), which is the same. Well practically the same, strictly speaking Any would bail out the match loop on first occurrence, count consult all previously visited members, but the matching element should always be the last on the "call stack" which makes the two expressions strictly equal.