【问题标题】:How I get a Arraylist with not double values?如何获得不具有双值的 Arraylist?
【发布时间】:2013-02-14 08:49:44
【问题描述】:

我想从 Active Directory 中获取 Departmentlist,为此我使用 Directoryentry 和 DirectorySearcher 类。我得到了部门列表,但是如何删除这个列表中的双值。

例如我现在的清单:

it
it
it
vg
per
vg
...

我只想要列表中的其中一个值:

it
vg
per
...(other departments)

我想将此列表用作下拉列表。

我的代码:

public static void GetAllDepartments(string domaincontroller) 
        {
            ArrayList list = new ArrayList();

            int Counter = 0;

            string filter = "(&(objectClass=user)(objectCategory=user)(!userAccountControl:1.2.840.113556.1.4.803:=2)(sn=*)(|(telephoneNumber=*)(mail=*))(cn=*)(l=*))";

            List<User> result = new List<User>();

            DirectoryEntry Entry = new DirectoryEntry(domaincontroller);

            DirectorySearcher Searcher = new DirectorySearcher(Entry, filter);

            foreach (SearchResult usr in Searcher.FindAll())
            {
                result.Add(new User()
                {
                    department = GetLdapProperty(usr, "Department")

                });

                Counter++;
            }

            for (int i = 0; i < Counter; i++)
            {

                list.Add(result[i].department);

            }
        }

如何在 Arraylist 中只显示一个值?

【问题讨论】:

  • 或者您可以使用 LINQ to Distinct() 值
  • 你为什么使用ArrayList...?

标签: c# asp.net arraylist active-directory directorysearcher


【解决方案1】:

首先,我建议不要使用 ArrayList,而是使用 Strongly-Typed list
然后,使用Distinct() 方法仅获取唯一值列表(无重复值)。

例如:

List<String> list = new List();

....

 for (int i = 0; i < Counter; i++)
 {
     list.Add(result[i].department.ToString());
 }

 var noDuplicates = list.Distinct();

【讨论】:

    【解决方案2】:

    System.Linq 扩展中尝试Distinct()

    list = list.Distinct();
    

    【讨论】:

      【解决方案3】:

      您也可以使用Exists 子句查看该元素是否已存在于列表中。

      using System.Linq;
      
      for (int i = 0; i < Counter; i++)
      {
         bool deptExists = list.Exists(ele => ele == result[i].department);
      
         if(!deptExists){
          list.Add(result[i].department);
         }
      }
      

      【讨论】:

        【解决方案4】:

        使用Enumerable.Distinct Method 方法。

        【讨论】:

          【解决方案5】:

          使用 HashSet 并且只插入不重复的值。

          HashSet<string> list = new HashSet<string>();
          
          ...
          
          for (int i = 0; i < Counter; i++)
          {
             string dep = result[i].department.ToString();
          
             // true if dep was added, false if not. No exception at this point.
             list.Add(dep);
          }
          

          【讨论】:

          • 在将项目添加到 HashSet 之前,您无需检查项目是否不存在。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多