编程语言
首页 > 编程语言> > 当C#中ArrayList存储对象为自定义对象时,使用IndexOf无法找自定义对象索引问题

当C#中ArrayList存储对象为自定义对象时,使用IndexOf无法找自定义对象索引问题

作者:互联网

当用 ArrayList 存储自己定义的类对象时,使用ArrayList的indexof(obj)无法找到正确的下标。

查看indexof的源代码显示为:

for (int j = startIndex; j < num; j++)
{
                object obj = array2[j];
                if (obj != null && obj.Equals(value))
                {
                    return j;
                }
}

 

 对象是引用类型,当使用两个对象比较时,由于引用地址不一致,所以判定;两个对象不相等。所以集合中自定义的对象需要重载 Equals方法,例如:

class CRation
    {
        public int n;//分子
        public int d;//分母
       

        // override object.Equals
        public override bool Equals(object obj)
        {
            

            if (obj == null || GetType() != obj.GetType())
            {
                return false;
            }
            CRation temp = (CRation)obj;
            if (this.n == temp.n && this.d == temp.d) return true;
            else return false;
          
        }

        // override object.GetHashCode
        public override int GetHashCode()
        {
            // TODO: write your implementation of GetHashCode() here
            // throw new NotImplementedException();
            return base.GetHashCode();
        }

    }

 

标签:obj,自定义,对象,Equals,C#,int,GetHashCode,return,public
来源: https://www.cnblogs.com/dabao2021/p/15399652.html