在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