What is the easiest way to foreach through a List removing unwanted objects?

后端 未结 3 1092
北恋
北恋 2021-01-31 23:08

In my application, _collection is a List from which I need to remove all User objects which do not match the criteria.

However, the fol

相关标签:
3条回答
  • 2021-01-31 23:55

    You can always start at the top index and iterate downward towards 0:

    for (int i = _collection.Count - 1; i >= 0; i--)
    {
        User user = _collection[i];
        if (!user.IsApproved())
        {
            _collection.RemoveAt(i);
        }
    }
    

    Mehrdad's answer looks pretty darn elegant, though.

    0 讨论(0)
  • 2021-01-31 23:58
    _collection.RemoveAll(user => !user.IsApproved());
    

    If you're still on 2.0:

    _collection.RemoveAll(delegate(User u) { return !u.IsApproved(); });
    

    By the way, if you don't want to touch the original list, you can get another list of approved users with:

    _collection.FindAll(user => user.IsApproved());
    
    0 讨论(0)
  • 2021-02-01 00:02

    Whenever there is a chance that a collection will be modified in a loop, opt for a for loop instead. The solution given by Mehrdad is lovely and definitely worth a try!

    Here's code I find helpful when dealing with modifiable collections:

    for(int index=0;index < _collection.Count; index++)
    {
        if (!_collection[index].IsApproved)
        {
            _collection.RemoveAt(index);
            index--;
        }
    }
    
    0 讨论(0)
提交回复
热议问题