从集合中删除对象
本文关键字:对象 删除 集合 | 更新日期: 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));