在C#中我有:
public class MyObj
{
// methods and properties etc.
}
List<MyObj> listOfObjects = new List<MyObj>();
listOfObjects.Remove( certainObj );
我想知道C#如何知道CertainObj在列表中...它是否在列表中定位CertainObj的过程中使用Equals()?
答案 0 :(得分:4)
是的,它使用Equals(...)
的{{1}}方法,如果方法尚未被覆盖,则默认为引用相等。
更具体地说,它使用MyObj
,EqualityComparer<T>.Default
反过来查看MyObj
是否实现IEquatable<T>
。如果没有,它将使用myObj.Equals(object obj)
重载,如果不重写则会调用Object.ReferenceEquals(...)
。
答案 1 :(得分:0)
请参阅http://msdn.microsoft.com/en-us/library/cd666k3e.aspx
此方法使用确定相等性 默认的相等比较器 EqualityComparer.Default for T,the 列表中的值类型。
此方法执行线性搜索; 因此,这种方法是O(n) 操作,其中n是计数。
答案 2 :(得分:0)
是的,检查MSDN的List类,它在。通用列表上的.Contains对象上使用.Equals()方法。