C#如何查找ArrayList 中的某个数据?(附解决方案及源码)

原创 2007年09月12日 18:59:00

 请问,如何查找ArrayList 中的某个数据???
我下面的代码为何总是返回false?
难道一定要用循环吗?


 private void button1_Click(object sender, EventArgs e)
 {

            ArrayList SenderAddressAL= new ArrayList();

            SenderAddressAL.Add(new SenderAddress("[Use system default]", ""));
            SenderAddressAL.Add(new SenderAddress("
abc@ebay.com", "abc@ebay.com"));


          

            if (SenderAddressAL.Contains(new SenderAddress("abc@ebay.com", "abc@ebay.com")))
                    MessageBox.Show("Have");
            else
                    MessageBox.Show("NOT Have");


        }

public class SenderAddress
    {
        //-----Description-----

        protected string description;


        public string Description
        {
            get { return description; }

            set { description = value; }
        }


        //-----eMailAddress-----

        protected string emailaddress;


        public string eMailAddress
        {
            get { return emailaddress.ToLower(); }

            set { emailaddress = value; }
        }

 

        public SenderAddress(string descr, string emailaddr)
        {
            description = descr;
            emailaddress = emailaddr;
        }
    }

Solution:

SenderAddress override Equals

参考这个代码,把类改一下就可以了:

//可以比较的类
class A
{
 private int m_i;
 public A(int i)
 {
  this.m_i = i;
 }
 public override bool Equals(object obj)
 {
  A _a = obj as A;
  if (_a != null && _a.m_i == this.m_i)
  {
   return true;
  }
  return base.Equals(obj);
 }
 public override int GetHashCode()
 {
  return base.GetHashCode();
 }
}

//测试
private void button1_Click(object sender, EventArgs e)
{
 ArrayList al = new ArrayList();
 al.Add(new A(1));
 al.Add(new A(2));
 al.Add(new A(3));

 if (al.Contains(new A(2)))
 {
  MessageBox.Show("have");
 }
 else
 {
  MessageBox.Show("no");
 }
}

public override bool Equals(object obj)
 {
  A _a = obj as A;
  if (_a != null && _a.m_i == this.m_i)
  {
   return true;
  }
  return base.Equals(obj);
 }
 public override int GetHashCode()
 {
  return base.GetHashCode();
 }

这种方法是最标准的方法。
这两段代码是关键,其中GetHashcode不写也行,但会有编译警告。

 

override SenderAddress的Equals方法,否则它做的是对象地址的比较,即比较是否为同一对象,所以你的代码总是返回false

 

C#入门7.11——ArrayList类中元素的遍历与查找

遍历: foreach语句,object类型 object:ArrayList中存储的类型不一定一支,也不一定能够完全转换,所以为了避免出错,我们采用object类型。 using System...
  • QPC908694753
  • QPC908694753
  • 2016年08月09日 18:31
  • 4160

C# ArrayList源码剖析

数组是C#中最基础的一种数据类型,一旦初始化之后,容量便已经确定。若想要动态扩充容量,那么集合可以满足这点需求。ArrayList是C#最常用也是最基础的一个动态数组。ArrayList在System...
  • exiaojiu
  • exiaojiu
  • 2016年04月19日 15:29
  • 653

C#从list里查找某个链表里的子项

list listTemp; listTemp.Find(x)=>{return x.strTemp.Equals("s")};
  • black_yu
  • black_yu
  • 2017年07月02日 21:11
  • 633

ArrayList如何删除指定的几个数据?

import java.util.ArrayList; public class tttt {   public static void main(String[] args) {  Arr...
  • wuxifu001
  • wuxifu001
  • 2015年02月12日 23:19
  • 2096

对ArrayList<T>中按照T的某个属性进行排序

对ArrayList中按照T的某个属性进行排序 1、先定义一个比较的方法 public class A implements Comparator { public int...
  • an13531829360
  • an13531829360
  • 2016年10月22日 11:42
  • 1043

C#返回arraylist集合长度的方法是什么?C#ArrayList重复数据删除

集合是 count(), 数组是Length 那个是引用类型的问题,ArrayList.Contains(object)里面的object比较的是引用(就像是一个指针),object的引用要指向的实...
  • taotaoah
  • taotaoah
  • 2016年01月25日 06:02
  • 822

20161109 ArrayList set add方法 替换对应位置数据

add方法有两个实现 public void add(int index, E object) public boolean add(E object) set方法有一个实现 ...
  • hepann44
  • hepann44
  • 2016年11月09日 10:11
  • 1192

C#找出字符串中某一字符的所有位置

C#找出字符串中某一字符的所有位置 查找某字符在字符串中的所有位置时,可以首先通过ToCharArray方法将字符串转换为Char类型的数组,然后循环访问该数组,如果数组中的值与要查找的...
  • x13163303344
  • x13163303344
  • 2016年01月16日 17:38
  • 1749

ArrayList的深度copy和浅度拷贝

arrayList的深度拷贝 两种方式 1、序列化对象然后进行拷贝 2、通过Collections.copy方法实现深度拷贝 ArrayList.clone对浅度拷贝 ArrayList.addA...
  • zouqingfang
  • zouqingfang
  • 2015年06月24日 16:28
  • 484

C# ArrayList 基本用法

首先说明一下ArrayList 与 数组的区别: (1)ArrayList 的容量可以根据需要自由扩充,数组的容量是固定的 (2)ArrayList 只能是一维形式,数组可以是多维的 (3)Array...
  • u013816709
  • u013816709
  • 2014年09月26日 11:03
  • 6026
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#如何查找ArrayList 中的某个数据?(附解决方案及源码)
举报原因:
原因补充:

(最多只允许输入30个字)