从集合中删除对象

本文关键字:对象 删除 集合 | 更新日期: 2023-09-27 18:20:27

我有一个对象集合,我希望在返回true或false的函数调用的基础上从中删除一些对象。请参阅下面的示例代码狙击-

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

我不想在这里使用循环。需要一个以上样本的线性代码。提前感谢。

从集合中删除对象

如果使用List ,那么带有谓词的RemoveAll方法就可以了

public int RemoveAll(
    Predicate<T> match
)

谓词(Of T)委托,用于定义要删除的元素的条件。

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

枚举集合时不能修改它。

尝试使用Linq:

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

毕竟,类型为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>
  • 还有更多

使用此选项筛选出有效对象:

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