从Collection中删除对象

时间:2012-01-17 13:29:26

标签: c# .net c#-4.0 loops collections

我有一个对象集合,我希望根据函数调用删除一些对象,它们将返回true或false。请参阅下面的示例代码snipette -

for each(MyClass obj in Objects)
{
  if(!ValidateObject(obj)
  { Objects.Remove(obj); }
}

我不想在这里使用循环。上面的样品需要一个衬垫代码。 在此先感谢。

4 个答案:

答案 0 :(得分:5)

如果您使用List

,那么带谓词的RemoveAll方法就可以了
public int RemoveAll(
    Predicate<T> match
)
  

Predicate(Of T)委托,定义要删除的元素的条件。

 List<MyClass > f = new List<MyClass >();
 f.RemoveAll(x => ! ValidateObject(x) );

答案 1 :(得分:3)

枚举时无法修改集合。

尝试使用Linq:

var validObjects = Objects.Where(z => ValidateObject(z));

答案 2 :(得分:1)

毕竟,输入IEnumerable<T>ICollection<T>左右的集合无法根据某些条件删除项目。

但是你可以创建一个像这样的扩展方法:

public static void CollectionsExtensions
{
      public static void RemoveInvalidItems(this ICollection<MyClass> some)
      {
             foreach(MyClass item in some.ToList())
             {
                    if(!new Validator().ValidateObject(item)) // Your class having your validation method
                    {
                          some.Remove(item);
                    }
             }
       }
}

因此,在一天结束时,您可以将循环转换为删除无效对象:

someCollectionOfMyClass.RemoveInvalidItems();

摘要:对于任何实现ICollection<MyClass>的集合,您可以删除一行中的所有无效项目,其中包括以下内容:

  • IList<T>
  • List<T>
  • 以及更多!

答案 3 :(得分:0)

使用此选项过滤掉有效对象:

var validObjects = Objects.Where(t=>ValidateObject(obj));