我有一个对象的集合,我希望从其中删除一些基于函数调用将返回true或false的对象。请参阅下面的示例代码snipette -从集合中删除对象
for each(MyClass obj in Objects)
{
if(!ValidateObject(obj)
{ Objects.Remove(obj); }
}
我不想在这里使用循环。需要一个以上样本的班轮码。 在此先感谢。
我有一个对象的集合,我希望从其中删除一些基于函数调用将返回true或false的对象。请参阅下面的示例代码snipette -从集合中删除对象
for each(MyClass obj in Objects)
{
if(!ValidateObject(obj)
{ Objects.Remove(obj); }
}
我不想在这里使用循环。需要一个以上样本的班轮码。 在此先感谢。
枚举枚举时无法修改集合。
尝试使用LINQ:
var validObjects = Objects.Where(z => ValidateObject(z));
[回答已删除的答案]从我从OP的问题中了解到的情况,他想删除对象并且“不想在此使用循环”。 好,这里没有使用Linq的循环。这回答了这个问题。 – ken2k 2012-01-17 13:36:16
我不这么认为,Linq也会循环。好吧,'Where'在单行中做了一个循环,但它又是一个循环。 – 2012-01-17 13:46:30
你的代码很混乱,因为你的obj变量代表了多个对象。此外,您的代码获取有效的对象,而不是无效的,并且不会删除它们。 – 2012-01-17 13:46:53
使用此过滤出有效对象:
var validObjects = Objects.Where(t=>ValidateObject(obj));
我没有发现使用Linq或'for-each'迭代器的任何区别,它没有解决任何问题。 – 2012-01-17 13:34:25
@MatíasFidemraizer - 你可以解释一下,如果它过滤了集合并且没有使用循环,它怎么样? – 2012-01-17 13:42:16
@GarryVass是的,你是对的,我错过了“单行”的事情,但顺便说一下,你认为你的答案能够解决“在一行中删除一个对象从这个集合中”? – 2012-01-17 13:44:15
,如果你使用的是列表
public int RemoveAll(
Predicate<T> match
)
的 RemoveAll法断言会做The Predicate(Of T)代表它定义了要移除的元素的条件。
List<MyClass > f = new List<MyClass >();
f.RemoveAll(x => ! ValidateObject(x));
+1,但我认为目标是移除ValidateObject返回false的对象:!ValidateObject(x) – 2012-01-17 13:39:55
@Meta - 我刚纠正它:) – 2012-01-17 13:40:14
毕竟,有没有办法,它的类型是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>
你需要更加准确。 1st - “Objects”是“MyClass”的集合吗?第二 - 你到目前为止尝试过什么?第三 - 有什么问题?再说一遍,如果你没有清楚地问问题,那听起来好像有人需要做你的功课! ;) – 2012-01-17 13:32:10
你可能想解释“我不想在这里使用循环”的原因。最终,每个解决方案都需要遍历所有项目,删除不需要的内容。 – 2012-01-17 13:52:21
@HansKesting我想他的研究背后没有任何技术原因,只是以较少的行数来完成。 – 2012-01-17 14:09:47