web-dev-qa-db-fra.com

Comment afficher des éléments de liste sur la fenêtre de la console en C #

J'ai un List qui contient tous les noms de bases de données. Je dois afficher les éléments contenus dans cette liste dans la console (à l'aide de Console.WriteLine()). Comment puis-je atteindre cet objectif?

31
ravikiran

En fait, vous pouvez le faire très simplement, puisque la liste a une méthode ForEach et que vous pouvez passer Console.WriteLine en tant que groupe de méthodes. Le compilateur utilisera ensuite une conversion implicite pour convertir le groupe de méthodes en, dans ce cas, un Action<int> et sélectionner la méthode la plus spécifique du groupe, dans ce cas `Console.WriteLine (int):

  var list = new List<int>(Enumerable.Range(0, 50));

  list.ForEach(Console.WriteLine);

Fonctionne aussi avec des chaînes =)

Pour être tout à fait pédant (et je ne suggère pas de changer votre réponse - juste pour faire un commentaire par intérêt) "Console.WriteLine" est un groupe de méthodes. Le compilateur utilise ensuite une conversion implicite du groupe de méthodes en Action, en choisissant la méthode la plus spécifique (Console.WriteLine (int) dans ce cas).

47
Svish

En supposant que les éléments remplacent ToString de manière appropriée:

public void WriteToConsole(IEnumerable items)
{
    foreach (object o in items)
    {
        Console.WriteLine(o);
    }
}

(Il n'y aurait aucun avantage à utiliser des génériques dans cette boucle - nous finirions par appeler Console.WriteLine(object) de toute façon, donc la boîte serait toujours comme dans la partie foreach dans ce cas.)

EDIT: Les réponses utilisant List<T>.ForEach sont très bonnes.

Ma boucle ci-dessus est plus flexible dans le cas où vous avez une séquence arbitraire (par exemple, à la suite d'une expression LINQ), mais si vous avez définitivement un List<T>, je dirais que List<T>.ForEach est une meilleure option.

Un avantage de List<T>.ForEach est que si vous avez un type de liste concret, il utilisera la surcharge la plus appropriée. Par exemple:

List<int> integers = new List<int> { 1, 2, 3 };
List<string> strings = new List<string> { "a", "b", "c" };

integers.ForEach(Console.WriteLine);
strings.ForEach(Console.WriteLine);

Lors de l'écriture des entiers, ceci utilisera Console.WriteLine(int), tandis que lors de l'écriture des chaînes, il utilisera Console.WriteLine(string). Si aucune surcharge spécifique n'est disponible (ou si vous utilisez simplement un List<T> générique et que le compilateur ne sait pas ce que est T), il utilisera Console.WriteLine(object).

Notez l'utilisation de Console.WriteLine en tant que groupe de méthodes. C'est plus concis que d'utiliser une expression lambda, et en réalité légèrement plus efficace (car le délégué juste sera un appel à Console.WriteLine, plutôt qu'un appel à une méthode qui à son tour appelle Console.WriteLine).

21
Jon Skeet

Alors que les réponses avec List<T>.ForEach sont très bonnes.

J'ai trouvé String.Join<T>(string separator, IEnumerable<T> values) méthode plus utile.

Exemple :

List<string> numbersStrLst = new List<string>
            { "One", "Two", "Three","Four","Five"};

Console.WriteLine(String.Join(", ", numbersStrLst));//Output:"One, Two, Three, Four, Five"

int[] numbersIntAry = new int[] {1, 2, 3, 4, 5};
Console.WriteLine(String.Join("; ", numbersIntAry));//Output:"1; 2; 3; 4; 5"

Remarques :

Si le séparateur est null, une chaîne vide (String.Empty) est utilisée à la place. Si l'un des membres de valeurs est null, une chaîne vide est utilisée à la place.

Join(String, IEnumerable<String>) est une méthode pratique qui vous permet de concaténer chaque élément d'une collection IEnumerable (Of String) sans d'abord convertir les éléments en tableau de chaînes. Cela est particulièrement utile avec les expressions de requête LINQ (Language-Integrated Query). 

Cela devrait fonctionner très bien pour le problème, alors que pour d'autres, avoir des valeurs de tableau. Utilisez d'autres surcharges de cette même méthode, String.Join, méthode (String, Object [])

Référence: https://msdn.Microsoft.com/en-us/library/dd783876(v=vs.110).aspx

15
Bhramar

Vous pouvez également utiliser la liste d'instruction de List, telle que:

List<T>.ForEach(item => Console.Write(item));

Ce code fonctionne aussi significativement plus rapide!

Le code ci-dessus vous permet également de manipuler Console.WriteLine, par exemple:

List<T>.ForEach(item => Console.Write(item + ",")); //Put a,b etc.
14
CasperT
Console.WriteLine(string.Join<TYPE>("\n", someObjectList));
7
BlackCoffee

J'ai trouvé cela plus facile à comprendre:

List<string> names = new List<string> { "One", "Two", "Three", "Four", "Five" };
        for (int i = 0; i < names.Count; i++)
        {
            Console.WriteLine(names[i]);
        }
1
Adola

Supposons qu'il soit nécessaire d'afficher certaines données dans l'invite de commande provenant d'une table de base de données. Nous créons d'abord une liste. Team_Details est ma classe de propriété.

    List<Team_Details> teamDetails = new List<Team_Details>();

Ensuite, vous pouvez vous connecter à la base de données et effectuer la récupération de données, puis l’enregistrer dans la liste comme suit.

            string connetionString = "Data Source=.;Initial Catalog=your DB name;Integrated Security=True;MultipleActiveResultSets=True";
            using (SqlConnection conn = new SqlConnection(connetionString)){
            string getTeamDetailsQuery = "select * from Team";
            conn.Open();
            using (SqlCommand cmd = new SqlCommand(getTeamDetailsQuery, conn))
                    {
                        SqlDataReader rdr = cmd.ExecuteReader();
                    {
                        teamDetails.Add(new Team_Details
                        {
                            Team_Name = rdr.GetString(rdr.GetOrdinal("Team_Name")),
                            Team_Lead = rdr.GetString(rdr.GetOrdinal("Team_Lead")),
                        });
                    }

Vous pouvez ensuite imprimer cette liste à l’invite de commande comme suit.

foreach (Team_Details i in teamDetails)
                        {
                            Console.WriteLine(i.Team_Name);
                            Console.WriteLine(i.Team_Lead);
                        }
0
Chamila Maddumage