在 foreach 循环中编辑迭代值
editing the iteration value in a foreach loop
情况
我正在尝试设计一个简单的删除方法,如果传入的 ID 参数与记录中的 ID 匹配,该方法将删除对象:
例如,如果一个种族的 ID 为“123”,那么它将找到 ID 为“123”的种族并将其设置为空,从而将其删除。
我在网上看了一些方法,是的,这似乎是 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 循环不允许我编辑迭代器。
如何用其他方式解决这个问题?
List<T>
已经提供了这样做的方法:
public void removeRace(string RaceID)
{
races.RemoveAll(br => RaceID == br.raceID);
}
如果您真的不想使用它,则必须使用 for
循环而不是 foreach
。
您应该能够使用 Linq 相当简单地做到这一点。
var filter = races.Where(d => d.Id != value).ToList();
这将说明一个值,它将被删除。你也可以做一个投影,用 SelectMany
和 Where
顶点也可以过滤。需要更多上下文。
这种方法可能并不理想,Marcin 的方法可能更理想。不过需要更多上下文。
情况
我正在尝试设计一个简单的删除方法,如果传入的 ID 参数与记录中的 ID 匹配,该方法将删除对象:
例如,如果一个种族的 ID 为“123”,那么它将找到 ID 为“123”的种族并将其设置为空,从而将其删除。
我在网上看了一些方法,是的,这似乎是 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 循环不允许我编辑迭代器。
如何用其他方式解决这个问题?
List<T>
已经提供了这样做的方法:
public void removeRace(string RaceID)
{
races.RemoveAll(br => RaceID == br.raceID);
}
如果您真的不想使用它,则必须使用 for
循环而不是 foreach
。
您应该能够使用 Linq 相当简单地做到这一点。
var filter = races.Where(d => d.Id != value).ToList();
这将说明一个值,它将被删除。你也可以做一个投影,用 SelectMany
和 Where
顶点也可以过滤。需要更多上下文。
这种方法可能并不理想,Marcin 的方法可能更理想。不过需要更多上下文。