我一直试图检查我的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)
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)