Net Core教程

当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();
        }

    }

 

这篇关于当C#中ArrayList存储对象为自定义对象时,使用IndexOf无法找自定义对象索引问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!