Vraag Lijstitems weergeven in het consolevenster in C #


ik heb een List welke alle databasenamen bevat. Ik moet de items in die lijst in de console weergeven (met Console.WriteLine()). Hoe kan ik dit bereiken?


28
2018-04-17 05:25


oorsprong


antwoorden:


Eigenlijk kun je het vrij eenvoudig doen, omdat de lijst een heeft ForEach methode en aangezien je kunt passeren Console.WriteLine als een methodegroep. De compiler gebruikt dan een impliciete conversie om de methodegroep te converteren naar, in dit geval, een Action<int> en kies de meest specifieke methode uit de groep, in dit geval `Console.WriteLine (int):

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

  list.ForEach(Console.WriteLine);

Werkt ook met strings =)

Helemaal pedant zijn (en ik suggereer geen verandering in je antwoord - alleen commentaar geven omwille van interesse) "Console.WriteLine" is een methodegroep. De compiler gebruikt dan een impliciete conversie van de methodegroep naar Action, waarbij in dit geval de meest specifieke methode wordt gekozen (Console.WriteLine (int)).


41
2018-04-17 06:17



Ervan uitgaande dat de items opheffen ToString op gepaste wijze:

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

(Er zou geen voordeel zijn bij het gebruik van generieke geneesmiddelen in deze lus - we zouden uiteindelijk bellen Console.WriteLine(object) hoe dan ook, dus het zou nog steeds boxen net als in de foreach deel in dit geval.)

EDIT: de antwoorden gebruiken List<T>.ForEach zijn zeer goed.

Mijn lus hierboven is flexibeler in het geval dat je een willekeurige volgorde hebt (bijvoorbeeld als het resultaat van een LINQ-uitdrukking), maar als je zeker een List<T> ik zou zeggen dat List<T>.ForEach is een betere optie.

Een voordeel van List<T>.ForEach is dat als u een concreet lijsttype hebt, dit de meest geschikte overbelasting zal gebruiken. Bijvoorbeeld:

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

Bij het schrijven van de gehele getallen, zal dit gebruiken Console.WriteLine(int), terwijl bij het uitschrijven van de reeksen die het zal gebruiken Console.WriteLine(string). Als er geen specifieke overbelasting beschikbaar is (of als u alleen een generieke gebruikt) List<T> en de compiler weet niet wat T is) het zal gebruiken Console.WriteLine(object).

Let op het gebruik van Console.WriteLine als een methodegroep trouwens. Dit is beknopter dan het gebruik van een lambda-uitdrukking, en eigenlijk licht efficiënter (zoals de afgevaardigde zal doen net een oproep zijn voor Console.WriteLine, in plaats van een oproep tot een methode die op zijn beurt gewoon roept Console.WriteLine).


21
2018-04-17 05:29



U kunt ook de ingebouwde foreach van Lijst gebruiken, zoals:

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

Deze code wordt ook uitgevoerd aanzienlijk sneller!

De bovenstaande code maakt het ook mogelijk om Console.WriteLine te manipuleren, zoals:

List<T>.ForEach(item => Console.Write(item + ",")); //Put a,b etc.

14
2018-04-17 06:11



Terwijl de antwoorden met List<T>.ForEach zijn zeer goed.

ik vond String.Join<T>(string separator, IEnumerable<T> values) methode nuttiger.

Voorbeeld:

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"

Opmerkingen:

Als scheidingsteken is nul, een lege string (String.Empty) wordt gebruikt. Als een lid van waarden is nul, in plaats daarvan wordt een lege string gebruikt.

Join(String, IEnumerable<String>) is een gemaksmethode waarmee je elk element in een kunt samenvoegen IEnumerable (Of String) verzameling zonder eerst de elementen om te zetten in een stringarray. Het is vooral handig bij taaluitgelichte query-expressies (LINQ).

Dit zou prima moeten werken voor het probleem, terwijl voor anderen het hebben van array-waarden. Gebruik andere overbelastingen van dezelfde methode, String.Join-methode (String, Object [])

Referentie: https://msdn.microsoft.com/en-us/library/dd783876(v=vs.110).aspx


14
2018-04-14 05:08



Console.WriteLine(string.Join<TYPE>("\n", someObjectList));

6
2018-04-17 13:44



Ik vond dit gemakkelijker te begrijpen:

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

1
2018-04-13 12:15



Stel dat we een aantal gegevens in de opdrachtprompt moeten bekijken die afkomstig zijn van een databasetabel. Eerst maken we een lijst. Team_Details is mijn eigendomsklasse.

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

Vervolgens kunt u verbinding maken met de database en het gedeelte voor het ophalen van gegevens uitvoeren en dit als volgt opslaan in de lijst.

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

Vervolgens kunt u deze lijst als volgt in de opdrachtprompt afdrukken.

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

0
2017-08-01 06:44