ArrayList ListA = new ArrayList();
ArrayList ListB = new ArrayList();
string str = "aaa";ListA.Add(str);
ListB.Add(str);if (ListA.Equals(ListB))
   return true;
else
   return false;为什么两个的返回false。
如何比较两个ArrayList的值是否相等?

解决方案 »

  1.   

    if (ListA.Equals(ListB))
    实际比较的是2个引用是否相同
      

  2.   

    要实现上面的功能除非自己重写Equals函数,再重写GetHashCode函数
      

  3.   

    实际上我就是为了给我的类重写一个Equals方法,我是这样的写的public override bool Equals(object obj)
    {
    if (obj == null || GetType() != obj.GetType()) return false;
    return ((Party)obj).PartyName.Equals(partyName) 
    && ((Party)obj).parents.Equals(parents)
    && ((Party)obj).children.Equals(children);
    }public override int GetHashCode()
    {
    return partyName.GetHashCode() ^ children.GetHashCode() ^ parents.GetHashCode();
    }其中parents和children是ArrayList类型,所以这样就会出错!
      

  4.   

    ArrayList ListA = new ArrayList();
    ArrayList ListB = ListA;
    string str = "aaa";ListA.Add(str);
    ListB.Add(str);if (ListA.Equals(ListB))
       return true;
    else
       return false;这样就相等啦
      

  5.   

    To: jackymi(完美刺客) 
    我也知道这样相等了,但我想知道如何实现两个List值比较的方法,真的得一个一个读出来进行比较?
      

  6.   

    比较通用的算法这么写public static bool EqualAll<T>(IEnumerable<T> first, IEnumerable<T> second)
    {
      using(IEnumerator<T> e1 = first.GetEnumerator())
      {
        using(IEnumerator<T> e2 = second.GetEnumerator())
        {
          while(e1.MoveNext())
          {
            if(!(e2.MoveNext() && object.Equals(e1.Current, e2.Current))) return false;
          }
          if(e2.MoveNext()) return false;
        }
      }
      return true;
    }
      

  7.   

    如果不在乎元素的内容是否相等的话,直接比较count,否则只有逐个比较
      

  8.   

    to:tiaoci(我挑刺,我快乐) 是用到generic吗?看来是高手呀!恩,学习!!!
      

  9.   

    读出来比较还要考虑位置的问题
    ArrayList ListA = new ArrayList();
    ArrayList ListB = new ArrayList();
    string str1 = "1";
    string str2 = "2";ListA.Add(str1);
    ListB.Add(str2);
    ListA.Add(str2);
    ListB.Add(str1);这样的列表 ListA 和ListB 相等吗? 要是相等,比较就更麻烦了.:)
      

  10.   

    to zihu928(笨狐狸)用 generics 的是懒人,不是高手
      

  11.   

    如果arraylist里是string等简单数据类型用一次顺环比较就ok如果是对象,对象里还有对象,那就要每个对象都加个比较方法equal(),上层对象equal()调用下层对象equal(),层层调用!类似的还有对象复制!汗!谁知道简单点的方法!
      

  12.   

    这种问题正是泛型的用武之地啊,挑刺的算法可以改进一下,如果T实现了ICompare接口,就让他自己比较:
    ICompare comparable = e1.Current as ICompare;
    if ( comparable != null )
      ....
      

  13.   

    问问高手。。EqualAll<T>是什么???顺便学习下。。先谢了
      

  14.   

    to zihu928(笨狐狸)
    用 generics 的是懒人,不是高手
    --------------------------------
    原来泛型在你的眼中不值一提, 呵