检查两个集合是否相等

时间:2011-10-10 14:55:16

标签: c# collections foreach

  

可能重复:
  Is there a built-in method to compare collections in C#?
  Comparing two collections for equality

我有两个集合,我想检查以查看其中包含的值是否不是eqaul。

   SearchResultCollection Users1 = ds1.FindAll();
   SearchResultCollection Users2 = ds2.FindAll();

接下来,我使用2个foreach循环进行迭代,然后分配变量。

foreach (SearchResult users in Users1)
{
   string ManagerID = users.Properties["OrgUnitManagerName"][0].ToString();
   string subGroup = users.Properties["EmployeeSubGroup"][0].ToString();
   string cn = users.Properties["cn"][0].ToString();

   foreach (SearchResult user in Users2)
   {
     string uid = absaUser.Properties["uid"][0].ToString();
   }
}

我想要做的是:检查User1中哪些用户没有在user2中使用,并打印出该列表。

if(cn != uid)
  {
  }

这似乎不起作用。 任何想法?

2 个答案:

答案 0 :(得分:3)

使用

bool AreIdentical = (Users1.Count == Users2.Count ) && (Users1.Except (Users2).Count() == 0) && (Users2.Except (Users1).Count() == 0);

编辑 - 根据评论:

要在User1中使用User而不在User2中使用:

var In1ButNotIn2 = Users1.Except (Users2);

答案 1 :(得分:2)

  1. 检查它们是否具有相同数量的记录,如果不是
  2. 则挽救
  3. 做一个list1.Except(list2) - 如果有任何结果,请拯救
  4. 否则 - 成功,他们匹配

    注意:这使用LINQ扩展方法Except,请参见此处:http://msdn.microsoft.com/en-us/library/bb300779.aspx。简而言之,list1.Except(list2)list1中的所有项目提供了除list2中的项目之外的所有项目。

    对象需要实现Equals才能正确比较相等性。