string[] SelectedAccessZonesArray = SelectedAccessZones.Trim().Split(' ');
string[] OldSelectedAccessZonesArray = OldSelectedAccessZones.Trim().Split(' ');
string[] UnchangedAccessZones = SelectedAccessZonesArray.Intersect(OldSelectedAccessZonesArray).ToArray();
string[] DeleteAccessZones = SelectedAccessZonesArray.Except(OldSelectedAccessZonesArray).ToArray();
string[] AddAccessZones = OldSelectedAccessZonesArray.Except(SelectedAccessZonesArray).ToArray();

解决方案 »

  1.   


       var A="1,2,3,4,5,6".Split(',');
       var B="3,4,5,6,7,8".Split(',');
       
       var UnchangedAccessZones=A.Where(a=>B.Contains(a)).ToArray();
       var DeleteAccessZones=A.Except(B).ToArray();
       var AddAccessZones =B.Except(A).ToArray();
      

  2.   

    To caozhy:
    System.Array不包含Intersect的定义
    System.Array不包含Except的定义请问需要导入什么吗或者using什么吗?谢谢
      

  3.   

    需要VS2008
    using System.Linq
      

  4.   

    用双重循环没什么不可以的,不一定非要LINQ,当然LINQ可以很简洁就是了
    if (OldSelectedAccessZone != UnchangedAccessZone)
                                    {
                                        IsDelete = true;
                                    }
    这里逻辑错误,你应该先指定IsDelete = true,判断有相同才置为false
      

  5.   

    还有,应该在匹配到结果的时候执行break,这样可以少循环很多次,而且不容易出逻辑错误
    否则本次执行本来已经匹配上了,又继续循环,可能又把状态改写了.
      

  6.   

    int[] A = { 1, 2, 3, 4, 5, 6 };
                int[] B = { 3, 4, 5, 6, 7, 8 };
                ArrayList UnchangedAccessZones = new ArrayList();
                ArrayList DeleteAccessZones = new ArrayList();
                ArrayList AddAccessZones = new ArrayList();            for (int i = 0; i < A.Length; i++)
                {
                    if (Array.IndexOf(B, A[i]) != -1)
                    {
                        UnchangedAccessZones.Add(A[i]);
                        
                    }
                    else
                    {
                        DeleteAccessZones.Add(A[i]);
                    }
                }
                for (int i = 0; i < B.Length; i++)
                {
                    if (Array.IndexOf(A, B[i]) == -1)
                    {
                        AddAccessZones.Add(B[i]);                }
                }
      

  7.   

    你也可以把一开始的string[ ]里面的内容也都放到ArrayList里
    就可以用if(ArrayList.Contains())去判断了,这样逻辑不容易出问题