Disco.Services.Interop.ActiveDirectory.ActiveDirectoryGroupCache.GetGroupsRecursive C# (CSharp) Method

GetGroupsRecursive() private method

private GetGroupsRecursive ( string DistinguishedName, Stack RecursiveTree ) : IEnumerable
DistinguishedName string
RecursiveTree Stack
return IEnumerable
        private IEnumerable<ADGroup> GetGroupsRecursive(string DistinguishedName, Stack<ADGroup> RecursiveTree)
        {
            var group = GetGroup(DistinguishedName);

            if (group != null && !RecursiveTree.Contains(group))
            {
                yield return group;

                if (group.MemberOf != null)
                {
                    RecursiveTree.Push(group);

                    foreach (var parentDistinguishedName in group.MemberOf)
                        foreach (var parentGroup in GetGroupsRecursive(parentDistinguishedName, RecursiveTree))
                            yield return parentGroup;

                    RecursiveTree.Pop();
                }
            }
        }