Как объединить 3 списка, даже если в списке null?

#c# #asp.net #.net #linq

#c# #asp.net #.net #linq

Вопрос:

У меня возникла проблема при объединении 3 списков, проблема в том, что она исходит из комбинации с несколькими вариантами выбора, поэтому я попытался объединить три списка, даже если они были пустыми, но инструкция «объединить» не работает с пустыми списками, кто-нибудь может меня направить.

 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);
}
  

Когда список пуст, он также превращает список результатов в null. Какую другую альтернативу вы могли бы использовать для объединения этих списков?

Комментарии:

1. ToList() всегда возвращает пустой список, если элементы не найдены. Не null. Но если listaPendientes значение равно null и код пропускается if (model.Estatus.Contains(4)) , тогда вам нужна проверка null, например, ответ @SalahAkbari.

2. Строка listaAutorizada.Concat(listaCompleta.Where(x => x.Autorizada == true).ToList()); ничего не делает, потому что вы игнорируете возвращаемое значение Concat метода.

Ответ №1:

Вам нужно проверить наличие null с помощью этого кода:

 ?? Enumerable.Empty<theListType>()
  

Итак, ваш код должен выглядеть так:

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

Ответ №2:

Этот метод можно использовать во многих сценариях:

 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;
    }
}