簡體   English   中英

從集合中刪除對象

[英]Remove object from Collection

我有一個對象集合,我希望根據函數調用刪除一些對象,這些函數返回true或false。 請參見下面的示例代碼片段-

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

我不想在這里使用循環。 上述樣本需要一個班輪代碼。 提前致謝。

如果您使用列表,則帶有謂詞的RemoveAll方法將起作用

public int RemoveAll(
    Predicate<T> match
)

Predicate(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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM