我有一個對象的集合,我希望從其中刪除一些基於函數調用將返回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