C# 从集合中删除/跳过项目的最佳方式是什么

C# 从集合中删除/跳过项目的最佳方式是什么,c#,asp.net,C#,Asp.net,从集合对象中删除/跳过项目的最佳方式是什么 List<Person> personList = new List<Person>() personList = dao.GetData(123); personList = personList.Select(x => x.Comment... ???? 因此,我的目标是名为“注释”的字段,如果注释为空,则不渲染 我本可以在foreach循环中使用if条件来实现这一点,但我正在寻找最佳实践您可以使用Where如 f

从集合对象中删除/跳过项目的最佳方式是什么

List<Person> personList = new List<Person>()
personList  = dao.GetData(123);
personList = personList.Select(x => x.Comment... ????
因此,我的目标是名为“注释”的字段,如果注释为空,则不渲染


我本可以在
foreach
循环中使用
if条件来实现这一点,但我正在寻找最佳实践

您可以使用
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));
List 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... ????
然后,您可以循环浏览
个人列表中的项目

当然,回过头来看,如果您甚至不需要
.Select()
(即,如果它除了尝试过滤之外什么都不做),那么这就更简单了:

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

您可以关注两个扩展:

其中

var subset = collection.Where(x => x != someValue);
foreach(Item item in myList.Where(x=>x.Comment != whatever))
    ...
这个方法简单地获取所有元素并对其应用谓词,只生成匹配的元素

跳过
跳过

var skipFirstThreeItems = collection.Skip(3);
var skippedItems = collection.SkipWhile(x => x != "SomeValue")
与第二种方法的重要区别在于,它将跳过值,直到谓词匹配为止,然后它将接受所有后续元素

如果要从列表中以破坏性方式删除有问题的项,请使用
RemoveAll(谓词)
方法;它将从列表中删除与谓词匹配的所有项:

myList.RemoveAll(x=>x.Comment == whatever);
如果要保持列表不变,并对项目进行筛选,请使用
Where

var subset = collection.Where(x => x != someValue);
foreach(Item item in myList.Where(x=>x.Comment != whatever))
    ...
保持列表不变;
Where
只提供应用了过滤器的列表的“视图”。

我经常认为最好的方法是有争议的,但我喜欢明确说明代码在做什么:

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

...

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

查看
Where
扩展方法。