看似很简单,却发生了这个错误。
IList<string> list = new List<string>();
list.Add("001");
list.Add("002");
list.Add("003");
list.Add("004");
list.ToList().RemoveAll(s => s == "002");
return list.Count.ToString();
Run Code Online (Sandbox Code Playgroud)
列表 Count 应该是 3,但它仍然是 4。是 RemoveAll() 方法中的错误吗?如果使用 List 而不是 IList 声明,则效果很好。
编辑 1. 如果不使用 ToList() 方法,则没有可调用的 RemoveAll() 方法。
如何避免这种情况使用 IList 作为参数,首先 list 是一个引用类型。我不应该完全使用 IList 作为声明吗?我们在项目中到处都使用了 IList。
public string List()
{
IList<string> list = new List<string>();
list.Add("001");
list.Add("002");
list.Add("003");
list.Add("004");
Remove(list);
return list.Count.ToString();
}
private void Remove(IList<string> list)
{
list.ToList().RemoveAll(a => a == "002");
}
Run Code Online (Sandbox Code Playgroud)当您使用时,ToList您实际上创建了列表的浅表副本,然后将其RemoveAll应用于新列表,因此原始列表不受影响。
如果你只找计数的无- “002”项目,然后简单的计数就足够了
list.Count - list.Count(i => i == "002");
Run Code Online (Sandbox Code Playgroud)
否则,如果您真的想从原始列表中删除这些项目,那么您将需要使用 for 循环以旧方式解决它。
无论如何,如果IList不是那么重要,您可以将列表另存为List和 not IList,并使用RemoveAll方法。
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |