C# 在不知道索引号的情况下从列表中删除项
本文关键字:列表 删除 情况下 不知道 索引 | 更新日期: 2023-09-27 18:32:07
我有一个包含我的对象集合的列表:
List<MyObj> list = new List<MyObj>();
我的函数收到 MyObj 作为参数,我想从列表中删除此对象,如此处建议的那样:C# 从列表中删除项目
private void remove(MyObj obj)
{
var itemToRemove = list.Where(x => x.fileName == obj.fileName);
if (itemToRemove != null)
list.Remove(itemToRemove);
}
收到编译器错误:
无法从"System.Collections.Generic.IEnumerable"转换为"命名空间"。MyObj'
Where()
返回一个IEnumerable<>
试试这个:
private void remove(MyObj obj)
{
var itemToRemove = list.Where(x => x.fileName == obj.fileName);
if (itemToRemove.Any())
list.Remove(itemToRemove.First());
}
更好的是,当您使用List<>
:
list.RemoveAll(x => x.fileName == obj.fileName);
编辑
其他解决方案,从下面的评论中同样可行。 选择你的毒药,虽然自私(也许很明显)我更喜欢RemoveAll
方法的可读性和简单性:
针织:
list = list.Where(x => x.filename != obj.filename).ToList();
Jeroen van Langen:
var itemToRemove = list.Where(x => x.fileName == obj.fileName).FirstOfDefault();
if (itemToRemove != null)
list.Remove(itemToRemove);
你在Where
和FirstOrDefault
之间混淆了:
private void remove(MyObj obj)
{
var itemToRemove = list.FirstOrDefault(x => x.fileName == obj.fileName);
if (itemToRemove != null)
list.Remove(itemToRemove);
}
不需要你实现这个方法,List的move方法已经按预期执行了这个操作。
http://msdn.microsoft.com/en-us/library/cd666k3e.aspx
public bool Remove(
T item
)
你应该使用 List 公开的 RemoveAll 方法来删除所有匹配的元素 -
private void remove(MyObj obj)
{
var itemToRemove = list.RemoveAll(x => x.fileName == obj.fileName);
}