将两个可能为空的列表与linq组合

本文关键字:列表 组合 linq 两个 | 更新日期: 2023-09-27 18:21:41

我有两个列表:

    var myIds = new List<int>()
        {
            1, 2, 3
        };
    var yourIds = new List<int>()
        {
            2, 3, 4
        };

这两个列表可以组合成一个这样的列表:

myIds.Union(yourIds)
.Select(x => new 
             { 
                 Id = x,
                 Mine = myIds.Contains(x), 
                 Yours = yourIds.Contains(x)
             });

新列表如下所示:

Id    Mine     Yours
---------------------
1      T         F
2      T         T
3      T         T
4      F         T

当列表中包含元素时,这非常有效。但是,如果列表有可能为空,该怎么办。我该如何处理空列表?

将两个可能为空的列表与linq组合

如果列表可以是null,那么您必须检查null。您也可以使用null合并运算符,如果任何列表是null,则返回一个空列表(内部也会检查null)

你可以做:

(mIds ?? Enumerable.Empty<int>()).Union(yourIds ?? Enumerable.Empty<int>())

(感谢@phoog评论)

但是IMO,最好检查null

但如果列表中有任何一个是空的,那么你不必进行任何检查,也不会有例外。即使两个列表都是空的,您也会得到一个空的结果。如果列表中的任何一个是null,则上面的代码将返回一个空列表。