我有一个对象集合,我希望根据函数调用删除一些对象,它们将返回true或false。请参阅下面的示例代码snipette -
for each(MyClass obj in Objects)
{
if(!ValidateObject(obj)
{ Objects.Remove(obj); }
}
我不想在这里使用循环。上面的样品需要一个衬垫代码。 在此先感谢。
答案 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));