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# Retry重试操作解决方案(附源码)

一、前言 (1)对于Thread的Abort方法,如果线程当前正在执行的是一段非托管代码,那么CLR就不会抛出ThreadAbortException,只有当代码继续回到CLR中时,才会引发Thre...

POI导出大量数据的简单解决方案(附源码)

说明:我的电脑 2.0CPU 2G内存 能够十秒钟导出 20W 条数据 ,12.8M的excel内容压缩后2.68M 我们知道在POI导出Excel时,数据量大了,很容易导致内存溢出。由于Exc...

.net C# asp.net SMTP 匿名发邮件完整解决方案,有源码.

最近根据项目的需要,需要一个邮件发送的功能,在网络上查找了很久,结果让人非常的遗憾,都没有找到一篇能完全解决的。网上的都是 只言片语 我非常郁闷,下定决心将这个问题解决。总共使用了6步就解决问题。 ...

c#视频会议系统解决方案源码

  • 2011年07月11日 10:42
  • 7KB
  • 下载

手机端页面自适应解决方案—rem布局进阶版(附源码示例)

该方案使用相当简单,把这段 原生JS 放到 HTML 的 head 标签中即可(注:不要手动设置viewport,该方案自动帮你设置) script>!function(e){function ...

说说 JavaScript 实现表单序列化的解决方案(附源码)

Ajax 的流行,导致了表单序列化需求非常普遍。表单提交时,浏览器是这样把数据发送给服务器的: 对表单字段的名称和值进行 URL 编码,使用 & 分隔。 不发送禁用的表单字段。 只发送勾选的复选框和单...

2017年最新SpringMVC微服务架构实战之基于事务的分布式解决方案高清视频附源码讲义

课程介绍: 分布式事务是一个绕不过去的挑战!微服务架构本质上就是分布式服务化架构,微服务架构的流行,让分布式事务问题日益突出!尤其是在订单业务、资金业务等系统核心业务流程中,一定要有可靠的分布式...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#如何查找ArrayList 中的某个数据?(附解决方案及源码)
举报原因:
原因补充:

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