C# 即使列表为空,如何连接3个列表?
我在连接3个列表时遇到了一个问题,问题是它来自一个多选组合,所以我尝试连接三个列表,即使它们是空的,但是“concatenate”指令不适用于空列表,有人可以指导我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
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())代码>不执行任何操作,因为您忽略了方法的返回值。