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

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

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

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

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

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

Wp7 list中列表项多样化的解决方案-CustomDataTemplateSelector(附源码)

在这篇文章中,我将解释如何在Windows Phone 7中创建类似Silverlight中的DataTemplateSelector定制DataTemplateSelector。有些人不了解silv...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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