从自定义列表中删除项目
本文关键字:删除项目 列表 自定义 | 更新日期: 2023-09-27 18:01:20
我有一个List<Fill> items
这是Fill
类:
public class Fill
{
public string arret { get; set;}
public string ligneSens { get; set;}
}
如何使用字符串值arret
和ligneSens
从这个列表中删除一个项目?
的例子:
void OnDelete(object sender, EventArgs e, string arretName, string ligneSensName)
{
var aFill = new Fill
{
arret = arretName,
ligneSens = ligneSensName
};
items.Remove(aFill); //<--- this doesn't work
}
很抱歉,我不知道怎么问这个问题。
您应该覆盖object
的Equals
和GetHashCode
方法。当你在引用类型(类)上调用Remove
时,它将通过它的Equals
方法寻找一个。
public class Fill
{
public string arret { get; set; }
public string ligneSens { get; set; }
public override bool Equals(object obj)
{
var other = obj as Fill;
if(other == null)
return false;
return other.arret == arret && other.ligneSens == ligneSens;
}
public override int GetHashCode()
{
return arret.GetHashCode() ^
ligneSens.GetHashcode();
}
}
关于GetHashCode()
在线覆盖搜索的最佳实践是什么,有很多问题
另一种方法是通过传递一个谓词来对集合中的每个项求值,从而明确地说明要删除的内容:
items.RemoveAll(item => item.arret = arretName &&
item.ligneSens == ligneSensName);
你必须使用RemoveAll()
,目前你正在传递一个新创建的对象,关于items
没有信息,因为它是一个新的引用而不是相同的引用:
void OnDelete(object sender, EventArgs e, string arretName, string ligneSensName)
{
items.RemoveAll(item => item.arret == arretName && item.ligneSens == ligneSensName);
}
Use List API RemoveAll
items.RemoveAll(x => x.arret.Equals("value") && x.ligneSensName.Equals("ligneValue"));