首页 > 解决方案 > 根据标准对列表进行分区的最简单方法是什么?

问题描述

比方说,我们有一个像这样的对象定义,

class MyObject {
    int id;
    string name;
}

我们有一个 MyObjects 列表。

List<MyObject> objectList

现在,我需要根据哪些对象具有非空名称字段,将此 objectList 划分为 2 个子列表。

因此,在操作之后,我需要有 2 个列表,objectsWithName其中 name 字段为非 null 并且objectsWithoutNamename 字段为 null (这是直接标准,但我更倾向于使用谓词将其划分为 2 个组)。

实现这一目标的最简单方法是什么?我可以在一次操作中做到这一点吗?允许使用 LINQ。

标签: c#listlinqienumerable

解决方案


两个 LINQ 语句可以:

var nameNotNull = objectList.Where(o => !string.IsNullOrEmpty(o.Name));
var nameNull = objectList.Where(o => string.IsNullOrEmpty(o.Name));

当然,您可以使用GroupBy, 或更有效的foreach语句。

要显示foreach选项:

List<MyObject> nameNotNull = new List<MyObject>();
List<MyObject> nameNull = new List<MyObject>();

foreach (MyObject o in objectList)
{
    if (!string.IsNullOrEmpty(o.Name))
    {
        nameNotNull.Add(o);
    }
    else
    {
        nameNull.Add(o);
    }
}

推荐阅读