关闭

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

2416人阅读 评论(0) 收藏 举报

 请问,如何查找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

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1073300次
    • 积分:12819
    • 等级:
    • 排名:第1049名
    • 原创:118篇
    • 转载:709篇
    • 译文:0篇
    • 评论:92条
    文章存档
    最新评论