188 votes

Comment concaténer des listes en C# ?

Si je l'ai fait :

List<string> myList1;
List<string> myList2;

myList1 = getMeAList();
// Checked myList1, it contains 4 strings

myList2 = getMeAnotherList();
// Checked myList2, it contains 6 strings

myList1.Concat(myList2);
// Checked mylist1, it contains 4 strings... why?

J'ai exécuté un code similaire à celui-ci dans Visual Studio 2008 et j'ai défini des points d'arrêt après chaque exécution. Après myList1 = getMeAList(); , myList1 contient quatre chaînes de caractères, et j'ai appuyé sur le bouton plus pour m'assurer qu'elles n'étaient pas toutes nulles.

Après myList2 = getMeAnotherList(); , myList2 contient six chaînes, et j'ai vérifié qu'elles n'étaient pas nulles... Après myList1.Concat(myList2); maListe1 ne contenait que quatre chaînes de caractères. Comment cela se fait-il ?

2voto

Esaith Points 357

Je sais que c'est vieux mais je suis tombé sur ce post rapidement en pensant que Concat serait ma réponse. Union a très bien fonctionné pour moi. Notez qu'elle ne renvoie que des valeurs uniques, mais sachant que j'obtenais de toute façon des valeurs uniques, cette solution m'a convenu.

namespace TestProject
{
    public partial class Form1 :Form
    {
        public Form1()
        {
            InitializeComponent();

            List<string> FirstList = new List<string>();
            FirstList.Add("1234");
            FirstList.Add("4567");

            // In my code, I know I would not have this here but I put it in as a demonstration that it will not be in the secondList twice
            FirstList.Add("Three");  

            List<string> secondList = GetList(FirstList);            
            foreach (string item in secondList)
                Console.WriteLine(item);
        }

        private List<String> GetList(List<string> SortBy)
        {
            List<string> list = new List<string>();
            list.Add("One");
            list.Add("Two");
            list.Add("Three");

            list = list.Union(SortBy).ToList();

            return list;
        }
    }
}

La sortie est :

One
Two
Three
1234
4567

2voto

Basheer AL-MOMANI Points 5565

Jetez un coup d'œil à ma mise en œuvre. Elle est à l'abri des listes nulles.

 IList<string> all= new List<string>();

 if (letterForm.SecretaryPhone!=null)// first list may be null
     all=all.Concat(letterForm.SecretaryPhone).ToList();

 if (letterForm.EmployeePhone != null)// second list may be null
     all= all.Concat(letterForm.EmployeePhone).ToList(); 

 if (letterForm.DepartmentManagerName != null) // this is not list (its just string variable) so wrap it inside list then concat it 
     all = all.Concat(new []{letterForm.DepartmentManagerPhone}).ToList();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X