使用linq组合两个可能的空列表

时间:2014-09-11 13:46:04

标签: c# linq

我有两个清单:

    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

当列表包含元素时,这很有用。但是,如果列表可能为null,该怎么办?我怎么能处理空名单?

1 个答案:

答案 0 :(得分:17)

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

你可以这样做:

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

(感谢@phoog comment

但IMO,最好核对null

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

相关问题