在C#中,我有:C#列表<MyObj> Remove方法
public class MyObj
{
// methods and properties etc.
}
List<MyObj> listOfObjects = new List<MyObj>();
listOfObjects.Remove(certainObj);
我想知道怎么做C#知道certainObj在列表...是否在定位certainObj的过程中使用的equals()在列表中?
在C#中,我有:C#列表<MyObj> Remove方法
public class MyObj
{
// methods and properties etc.
}
List<MyObj> listOfObjects = new List<MyObj>();
listOfObjects.Remove(certainObj);
我想知道怎么做C#知道certainObj在列表...是否在定位certainObj的过程中使用的equals()在列表中?
是的,它使用MyObj
的Equals(...)
方法,如果方法没有被覆盖,默认引用相等。
更具体地说,它使用EqualityComparer<T>.Default
,其依次看起来是否MyObj
实现IEquatable<T>
。否则,它将使用myObj.Equals(object obj)
过载,如果未覆盖,则会调用Object.ReferenceEquals(...)
。
参见http://msdn.microsoft.com/en-us/library/cd666k3e.aspx
此方法使用 默认的相等比较 EqualityComparer.Default为T,则 类型列表中的值的确定平等。
此方法执行线性搜索;因此,此方法是一个O(n) 操作,其中n是Count。
对于List类,它使用.Equals()方法对通用列表上的.Contains对象进行检查。
为什么不使用反射器? – 2010-12-13 19:01:13