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

nav*_*8tr 4 c# linq

我有两个清单:

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

    var yourIds = new List<int>()
        {
            2, 3, 4
        };
Run Code Online (Sandbox Code Playgroud)

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

myIds.Union(yourIds)
.Select(x => new 
             { 
                 Id = x,
                 Mine = myIds.Contains(x), 
                 Yours = yourIds.Contains(x)
             });
Run Code Online (Sandbox Code Playgroud)

新列表如下所示:

Id    Mine     Yours
---------------------
1      T         F
2      T         T
3      T         T
4      F         T
Run Code Online (Sandbox Code Playgroud)

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

Hab*_*bib 18

如果列表可以null,那么你必须检查null.您还可以使用null合并运算符,如果任何列表null然后返回一个空列表(在内部也将检查null).

你可以做:

(mIds ?? Enumerable.Empty<int>()).Union(yourIds ?? Enumerable.Empty<int>())
Run Code Online (Sandbox Code Playgroud)

(感谢@phoog 评论)

但IMO,最好检查一下 null

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

  • 你可以使用`myIds = myIds ?? Enumerable.Empty <int>();`以避免不必要的新列表实例化.替换您给出的表达式中的空对象不会避免lambda中的空引用异常. (3认同)