2012-07-15 20 views
2

对不起,如果非常原始的问题,但我不知道这是如何工作与列表,当你调用Remove()方法并传递给它一个对象,在集合中具有完全相同字段和值的对象已经存在。List <T> .Remove()将如何工作在完全相同的对象

我有这样一个类:

public class Test 
{ 
    private List<string> _names; 

    public void Add(string name) 
    { 
     _names.Add(name); 
    } 

    public void Remove(string name) 
    { 
     _names.Remove(name) 
    } 
} 

如果超过name同一个(实例)在列表中已经出现什么情况?考虑从另一个类中调用这个Remove方法?

回答

8

Read the documentation

它说的.Remove(T item)

“将删除List<T>特定对象的第一次出现。”

如果要删除所有出现,使用.RemoveAll(Predicate<T> match),就像这样:

public void Remove(String name) { 
    _names.RemoveAll(s => s.Equals(name)); 
} 
+0

首先发生?所以它不参考? – 2012-07-15 00:18:52

+1

“列表”中的项目被索引引用,而不是按值引用。 “第一次出现”是'value.Equals(item)'返回true的最小索引值。事实上,在列表中稍后的另一个索引处存在相同的值是无关紧要的,因为它仍然会在该位置(因为'.Remove'操作将会移动项目,所以它会向上移动)。 – Dai 2012-07-15 00:20:36

相关问题