在 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();

这将说明一个值,它将被删除。你也可以做一个投影,用 SelectManyWhere 顶点也可以过滤。需要更多上下文。

这种方法可能并不理想,Marcin 的方法可能更理想。不过需要更多上下文。