C# 即使列表为空,如何连接3个列表?

C# 即使列表为空,如何连接3个列表?,c#,asp.net,.net,linq,C#,Asp.net,.net,Linq,我在连接3个列表时遇到了一个问题,问题是它来自一个多选组合,所以我尝试连接三个列表,即使它们是空的,但是“concatenate”指令不适用于空列表,有人可以指导我 if (model.Estatus.Count() < 3) { if (model.Estatus.Contains(2)) { var aut = listaCompleta.Where(x => x.Autorizada == true).ToList(); list

我在连接3个列表时遇到了一个问题,问题是它来自一个多选组合,所以我尝试连接三个列表,即使它们是空的,但是“concatenate”指令不适用于空列表,有人可以指导我

if (model.Estatus.Count() < 3)
{
    if (model.Estatus.Contains(2))
    {
        var aut = listaCompleta.Where(x => x.Autorizada == true).ToList();
        listaAutorizada.Concat(listaCompleta.Where(x => x.Autorizada == true).ToList());
    }
    if (model.Estatus.Contains(3))
    {
        listaRechazada.Concat(listaCompleta.Where(x => x.Autorizada == false).ToList());
    }
    if (model.Estatus.Contains(4))
    {
        listaPendientes.Concat(listaCompleta.Where(x => x.Autorizada == null).ToList());
    }
    listaEstatus.Concat(listaAutorizada).Concat(listaRechazada).Concat(listaPendientes);
}
if(model.Estatus.Count()<3)
{
if(模型状态包含(2))
{
var aut=listaCompleta.Where(x=>x.Autorizada==true.ToList();
Concat(listaCompleta.Where(x=>x.Autorizada==true.ToList());
}
if(模型状态包含(3))
{
Concat(listaCompleta.Where(x=>x.Autorizada==false.ToList());
}
if(模型状态包含(4))
{
Concat(listaCompleta.Where(x=>x.Autorizada==null.ToList());
}
海螺(Listaaestatus)、海螺(Listaaeutorizada)、海螺(listaRechazada)、海螺(listaPendientes);
}

当列表为空时,它也会将结果列表变为空。您还可以使用什么其他方法来合并这些列表?

您需要使用以下代码检查null:

?? Enumerable.Empty<theListType>()
??Enumerable.Empty()
因此,您的代码应该如下所示:

var result = (list1 ?? Enumerable.Empty<ListType>()).Concat(list2 ?? 
           Enumerable.Empty<ListType>()).Concat(list3 ?? Enumerable.Empty<ListType>());
var result=(list1??Enumerable.Empty()).Concat(list2??
Enumerable.Empty()).Concat(列表3??Enumerable.Empty());

此方法可用于许多场景:

class Program
{
    static void Main()
    {
        var list1 = new List<string> { "bella", "ci" };
        var list2 = new List<string> { "bella", "ci" };
        List<string> list3 = null;

        var result = ConcatLists(list1, list2, list3);
    }

    public static List<T> ConcatLists<T>(params List<T>[] lists)
    {
        var outputList = new List<T>();

        foreach(var list in lists)
        {
            if (list != null)
                outputList.AddRange(list);
        }

        return outputList;
    }
}
类程序
{
静态void Main()
{
var list1=新列表{“bella”,“ci”};
var list2=新列表{“bella”,“ci”};
List list3=null;
var结果=目录列表(列表1、列表2、列表3);
}
公共静态列表目录列表(参数列表[]列表)
{
var outputList=新列表();
foreach(列表中的变量列表)
{
如果(列表!=null)
outputList.AddRange(列表);
}
返回输出列表;
}
}

ToList()
在未找到任何项目时,将始终返回空列表。不为空。但是如果
listaPendientes
为空,并且代码跳过
if(model.Estatus.Contains(4))
则需要一个空检查,如@SalahAkbari-answer。行
listaAutorizada.Concat(listaCompleta.Where(x=>x.Autorizada==true.ToList())不执行任何操作,因为您忽略了方法的返回值。