在foreach循环中编辑迭代值

时间:2015-05-14 02:28:48

标签: c# loops iteration

场合

我尝试设计一个简单的删除方法,如果传入的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循环不允许我编辑迭代器。

如何以其他方式解决此问题?

2 个答案:

答案 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();

这会占一个值,它会删除。您还可以进行投影,SelectManyWhere也可以过滤。需要更多的背景。

这种方法可能并不理想,Marcin的方法可能更为理想。但需要更多背景。