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?
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).
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
).
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
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.
Console.WriteLine(string.Join<TYPE>("\n", someObjectList));
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]);
}
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);
}