使用 .在列表<类别>中删除
本文关键字:删除 类别 列表 使用 | 更新日期: 2023-09-27 18:31:57
尝试使用 .remove 从我的列表中删除内容.. 但它不起作用,给我错误"参数类型'字符串'不能分配给参数类型'System.Predicate'
public void ManiPulateCategory(string categoryToManipulate)
{
createCategories = repository.Load(path);
foreach (Category item in createCategories)
{
createCategories.Remove(item.CategoryName)
}
}
我认为您正在尝试从类别列表中删除所有具有与categoryToManipulate
匹配CategoryName
的项目。
如果这是您想要的,您可以使用如下List.RemoveAll()
来完成:
createCategories.RemoveAll
(
catagory => catagory.CategoryName == categoryToManipulate
);
这是在List
上使用一种方法,而不是来自IEnumerable
的东西。如果您只有一个可用的IEnumerable
,则必须使用不同的解决方案 - 但您说您有一个 List
,所以这应该有效。
这可以通过将所谓的谓词传递给RemoveAll()
来工作。谓词只是采用某种类型的单个参数并返回 true 或 false 的方法。它将为列表中的每个元素调用一次,并将该元素作为参数传递。如果它返回 true,则将删除该元素。
在本例中,我没有为谓词创建单独的方法;相反,我编写了一个内联lambda expression
来实现它。
createCategories.RemoveAll(x=>x.CategoryName == categoryToManipulate)
类似的东西?(已修复以反映评论,但最初由上面的Matthew Watson提出)
也看看这个答案
为了在列表中找到正确的项目,您必须覆盖 Equals 和 GetHashCode from Object。
class Category {
public override bool Equals(object obj)
{
if (!(obj is Category)) return false;
return this.CategoryName == ((Category)obj).CategoryName;
}
public override int GetHashCode()
{
this.CategoryName.GetHashCodeU();
}
}
现在,您可以在循环中调用createCategories.remove(item)
。