如何在我的对象上使用arrayList.contains

Bra*_*rad 3 .net c#

我一直试图检查我的arraylist以查看某个对象是否已经存在,但它总是返回false.有没有人对我在使用arrayList做错了什么感到厌烦.

ArrayList arr;

void Init()
{
   arr = new ArrayList();  

}

void Fred()
{   
   CauseAssignment ca = new CauseAssignment(Param1.Text, Param2.Text);
   if(!arr.Contains(ca))
       arr.Add(ca);

}



 public class CauseAssignment
{
    private string _Path;
    public string Path
    {
        get { return _Path; }
    }

    private string _DelimRootCause;
    public string DelimRootCause
    {
        get { return _DelimRootCause; }
    }

    public CauseAssignment(string path, string delimRootCause)
    {
        _Path = path;
        _DelimRootCause = delimRootCause;
    }
    public override string ToString()
    {
        return _Path;
    }
}
Run Code Online (Sandbox Code Playgroud)

LBu*_*kin 8

Contains()ArrayList 的方法使用Equals()您存储的对象上的available 实现来确定相等性.

如果您希望将类的两个不同实例视为等效,则需要覆盖该Equals()方法以在返回时返回true.然后,您还应该重载GetHashCode()字典中的一致性和可用性.这是一个例子:

public class CauseAssignment
{
    private string _Path;

    /* the rest of your code */

    public override bool Equals( object o )
    { 
        if( o == null || o.GetType() != typeof(CauseAssignment) )
            return false;
        CauseAssignment ca = (CauseAssignment)o;
        return ca._Path.Equals( this._Path );
    }

    public override int GetHashCode()
    {
        return _Path.GetHashCode();
    }
}
Run Code Online (Sandbox Code Playgroud)