场合
我尝试设计一个简单的删除方法,如果传入的ID参数与记录中的ID匹配,则删除对象:
例如,如果一个种族有一个ID" 123"然后它会找到有ID" 123"并将其设置为null,从而将其删除。
我已经在网上查看了一些方法,是的,这似乎是foreach的一个反复出现的问题,但如果可能,我真的很想这样做。
public void removeRace(string RaceID)
{
foreach (BaseRace br in races)
{
//if the ID entered into this method as a parameter matches an ID on record.
if (RaceID == br.raceID)
{
//set the current ID to null, thus deleting the record.
//br = null;
}
}
}
问题
我的代码,特别是br = null;
不起作用,因为foreach循环不允许我编辑迭代器。
如何以其他方式解决此问题?
答案 0 :(得分:4)
List<T>
已经提供了执行此操作的方法:
public void removeRace(string RaceID)
{
races.RemoveAll(br => RaceID == br.raceID);
}
如果您真的不想使用它,则必须使用for
循环而不是foreach
。
答案 1 :(得分:0)
你应该能够用Linq做到相当简单。
var filter = races.Where(d => d.Id != value).ToList();
这会占一个值,它会删除。您还可以进行投影,SelectMany
和Where
也可以过滤。需要更多的背景。
这种方法可能并不理想,Marcin的方法可能更为理想。但需要更多背景。