我有一个List<MyObj>
我在类MyObj中重写了Equals(Object)方法。
当我在我的列表上调用indexof时,它没有得到任何索引,并且equals方法也没有被调用。
我的假设是正确的吗?当我调用indexof时,Equals(Object)应该被调用吗?
如果不是,那么如果我没有准确引用对象但对象在逻辑上相同,我该如何找到MyObj对象?
这是我正在使用的代码
public class TreeNode<T>
{
private readonly List<TreeNode<T>> _children = new List<TreeNode<T>>();
public TreeNode(T value)
{
Value = value;
}
public virtual bool Equals(Object obj)
{
TreeNode<T> treeNode = (TreeNode<T>)obj;
if (treeNode.Value.Equals(Value))
return true;
else
return false;
}
public TreeNode<T> this[int i]
{
get { return _children[i]; }
}
public TreeNode<T> Parent { get; private set; }
public T Value { get; set; }
public ReadOnlyCollection<TreeNode<T>> Children
{
get { return _children.AsReadOnly(); }
}
public TreeNode<T> AddChild(T value)
{
var node = new TreeNode<T>(value) { Parent = this };
_children.Add(node);
return node;
}
public bool RemoveChild(TreeNode<T> node)
{
return _children.Remove(node);
}
public void Traverse(Action<T> action)
{
action(Value);
foreach (var child in _children)
child.Traverse(action);
}
}
这是我称之为集合的方式。
int artistIndex = serverDirs.Children.IndexOf(new TreeNode<String>(artist));
返回的索引始终为-1,即使该项存在于子节点中。
谢谢。
List<T>
,您不需要GetHashCode
,但是如果您将MyObj
放入Dictionary
中,则需要。最好在实现任何一个时都实现两个。对于您的IndexOf
调用,Equals
应该可以工作,除非您的比较本身存在问题。如果需要更多输入,代码会有所帮助。 - DocMax