簡體   English   中英

從集合中刪除/跳過項目的最佳方法是什么

[英]What is the best way to remove/skip an item from collection

從集合對象中刪除/跳過項目的最佳方法是什么

List<Person> personList = new List<Person>()
personList  = dao.GetData(123);
personList = personList.Select(x => x.Comment... ????

結果集:

"GCE"   
Not available 
""               //comments
"RES" 
9.97000000 
9.99000000 

........
........
........

所以,我的目標是“評論”字段,如果評論是空的,那么不要渲染。

我可以在foreach循環中使用if condition但我正在尋找最佳實踐

如果要破壞性地從列表中刪除違規項,請使用RemoveAll(Predicate<T>)方法; 它會從列表中刪除與謂詞匹配的所有項:

myList.RemoveAll(x=>x.Comment == whatever);

如果要保持列表相同並生成過濾的項目序列 ,請使用Where

foreach(Item item in myList.Where(x=>x.Comment != whatever))
    ...

這使列表保持不變; Where只是為您提供了應用過濾器的列表的“視圖”。

你可以使用Where ...

foreach (var a in personList.where(x => !string.IsNullOrWhitespace(x.Comment))
{
   // code
}

這會將列表限制為具有非null和非空白字符串的注釋:

List<Person> personList = dao.GetData(123); 
filteredList = personList.Where(x => !String.IsNullOrWhitespace(x.Comment));

您甚至可以在使用之前使用LINQ過濾集合。 對於初學者來說,這有點多余:

List<Person> personList = new List<Person>()
personList  = dao.GetData(123);
personList = personList.Select(x => x.Comment... ????

聽起來你正在尋找的是這樣的:

var personList = dao.GetData(123)
                    .Where(p => !string.IsNullOrWhitespace(p.Comment))
                    .Select(p => ...

然后你可以遍歷personList的項目。

當然,回過頭來看,如果你甚至不需要 .Select() (也就是說,除了嘗試過濾之外沒有做任何事情),那么這更簡單:

var personList = dao.GetData(123)
                    .Where(p => !string.IsNullOrWhitespace(p.Comment))

您可以關注兩個擴展:

Where

var subset = collection.Where(x => x != someValue);

此方法只接受所有元素並將謂詞應用於它,僅產生匹配元素。

SkipSkipWhile

var skipFirstThreeItems = collection.Skip(3);
var skippedItems = collection.SkipWhile(x => x != "SomeValue")

與第二個區別的重要區別是它將跳過值直到謂詞匹配,然后它將采用所有后續元素。

我經常認為最好的方法是有爭議的,但我喜歡明確代碼的作用:

var peopleWithComments = dao.GetData(123)
  .Where(person => person.Comment.IsPresent());

...

public static class StringExtensions {
  public bool IsPresent(this string self) {
    return !String.IsNullOrWhitespace(self);
  }
}

暫無
暫無

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

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