尝试使用.remove从我的列表中删除东西..但它不起作用,给我错误“参数类型'字符串'不能分配给参数类型'System.Predicate'
public void ManiPulateCategory(string categoryToManipulate)
{
createCategories = repository.Load(path);
foreach (Category item in createCategories)
{
createCategories.Remove(item.CategoryName)
}
}
答案 0 :(得分:3)
我认为您试图从类别列表中删除CategoryName
匹配categoryToManipulate
的所有项目。
如果这是你想要的,你可以使用List.RemoveAll()
这样做:
createCategories.RemoveAll
(
catagory => catagory.CategoryName == categoryToManipulate
);
这是使用List
上的方法,而不是来自IEnumerable
的方法。如果您只有IEnumerable
可用,则必须使用其他解决方案 - 但您说您有List
,所以这应该有用。
这可以通过将所谓的谓词传递给RemoveAll()
来实现。谓词只是一个方法,它接受某种类型的单个参数,并返回true或false。它将为列表的每个元素调用一次,将该元素作为参数传递。如果返回true,则将删除该元素。
在这种情况下,我没有为谓词创建单独的方法;相反,我写了一个内联lambda expression
来实现它。
答案 1 :(得分:1)
createCategories.RemoveAll(x=>x.CategoryName == categoryToManipulate)
那样的东西? (固定以反映评论,但最初由Matthew Watson提出)
另请查看此Answer
答案 2 :(得分:0)
为了在列表中找到正确的项目,您必须从Object重写Equals和GetHashCode。
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)
。