List<T>的IndexOf()方法
如果T是值類型的,就按照比較值的方法從列表的第一個元素開始逐個匹配,如果T是引用類型,就比較引用是否相同
舉例如下:
class A { public int x; public A(int x) { this.x = x; } } List<A> listA = new List<A>(); listA.Add( new A(3) ); listA.Add( new A(4) ); listA.Add( new A(5) ); listA.Add( new A(54) ); Console.WriteLine( listA.IndexOf( new A(3) ) );
自定義的類是引用類型,因此IndexOf按照比較引用的方式查找元素,當然找不到,打印-1,如果A被定義成結構體,則可以找到該元素,打印0
Remove方法也是這個道理,移除的方式取決於T的類型
只是HashSet<T>和List<T>的Remove方法稍有不同:
HashSet<T>中不允許有重復元素而List<T>允許,HashSet<T>調用Remove方法后如果移除成功,就可以判斷這個集合中已經不存在剛剛被移出去的元素,而List<T>調用Remove(t1)方法后只移除掉第一個匹配到的元素,不能保證此集合中沒有其他的與t1相等的元素存在。