C# do..while 循环列表

标签 c# .net list do-while

我想创建一个简单的应用程序来显示递归组成员资格,但不是用户而是组。因此,如果 groupA 将 groupB 作为成员,而 groupB 将 groupC 作为成员,我希望代码向我显示嵌套到最后一个的所有组。 这是我所拥有的示例:

if (member.Any())
{
    List<string> tempGroup = new List<string>();
    do
    {
        tempGroup.Clear();
        foreach (object nestedGroup in member)
        {
            SearchResult NestedGroupMemberResult = null;
            try
            {
                string NestedgroupMemberSearchFilter = "(&(objectClass=group)(distinguishedName=" + nestedGroup.ToString() + "))";
                string NestedgroupMemberPropertise = "member,distinguishedName";
                NestedGroupMemberResult = dirSearcher(NestedgroupMemberSearchFilter, NestedgroupMemberPropertise);
            }
            catch { }
            if(NestedGroupMemberResult.Properties["member"].Count > 0)
            {
                foreach (object NestedGroupMember in NestedGroupMemberResult.Properties["member"])
                {
                    member.Add(NestedGroupMember.ToString());
                    tempGroup.Add(NestedGroupMember.ToString());
                }
            }
        }
    } while (!tempGroup.Any());
}

listBox1.DataSource = member;

成员基本上是一个列表,其中包含来自输​​入组的组成员。比方说,我最初把 GroupA 和它有成员作为 GroupB 和 GroupC,两者都将在成员列表中。现在我希望循环 do..while 使用应用的 LDAP 过滤器搜索输入组的每个成员,如果找到任何组,则将其添加到成员列表和临时组列表中,因此每次有嵌套组时,成员列表都会被更新,同时它将被包含在 foreach 循环中。如果应用程序发现没有更多的嵌套组,则 tempGroup 列表将为空并且循环将停止。

但是我不断收到错误“System.InvalidOperationException:‘集合已修改;枚举操作可能无法执行。’”对于

foreach (object nestedGroup in member)

而且我想当 for 循环遍历它时我不能修改成员列表。我在 powershell 中有非常相似的循环,效果很好,但我想要一个 c# 应用程序,因为我知道它在此类搜索中可以更快。

最佳答案

不要修改您正在使用 foreach 枚举的集合。相反,您可以收集所有必须修改的内容:

List<Object> addMembers = new List<Object>();

foreach (object nestedGroup in member)
{
   // ...        
       foreach (object NestedGroupMember in NestedGroupMemberResult.Properties["member"])
        {
            addMembers.Add(NestedGroupMember.ToString());
            //...
        }
    }
    // ...
}

addMembers.ForEach(member.Add);

关于C# do..while 循环列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53316272/

相关文章:

c# - 在没有 Helper 属性的情况下一对一映射 EntityFramework

python - 在 python 中对字典的字典列表进行排序

c# - 如何使用 Word Automation 在段落中添加下标字符?

c#有没有办法让我的基类和派生类分别实现接口(interface)方法?

javascript - 文本框轮廓被覆盖

c# - 带有代码修复的 VS2015 诊断 - NuGet 或 VSIX 或两者?

c# - 加密值每次都不会返回相同的值

c# - C# 编译器和虚拟机中如何处理 lambda 表达式?

list - 我应该如何删除列表中的非数字使用序言

list - grails列表和createCriteria()