Подтвердить что ты не робот

Как отображать элементы списка в окне консоли в С#

У меня есть List, который содержит все имена баз данных. Мне нужно разобрать элементы, содержащиеся в этом списке в консоли (с помощью Console.WriteLine()). Как я могу достичь этого?

4b9b3361

Ответ 1

На самом деле вы можете сделать это довольно просто, поскольку в списке есть метод ForEach и вы можете передать Console.WriteLine в качестве группы методов. Затем компилятор будет использовать неявное преобразование для преобразования группы методов в, в данном случае, Action<int> и выбрать наиболее конкретный метод из группы, в данном случае Console.WriteLine(int):

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

  list.ForEach(Console.WriteLine);

Работает со строками тоже =)

Чтобы быть крайне педантичным (и я не предлагаю изменить ваш ответ - просто комментирую ради интереса) Console.WriteLine - это группа методов. Затем компилятор использует неявное преобразование из группы методов в Action<int>, выбирая наиболее конкретный метод (в данном случае Console.WriteLine(int)).

Ответ 2

Предполагая, что элементы переопределяют ToString соответственно:

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

(В этом цикле не было бы никакого преимущества при использовании генериков), в любом случае мы получим вызов Console.WriteLine(object), поэтому в этом случае он будет по-прежнему размещаться так же, как в части foreach.)

EDIT: ответы с использованием List<T>.ForEach очень хорошие.

Мой цикл выше более гибкий в случае, когда у вас есть произвольная последовательность (например, в результате выражения LINQ), но если у вас определенно есть List<T>, я бы сказал, что List<T>.ForEach является лучшим вариантом.

Одним из преимуществ List<T>.ForEach является то, что если у вас есть конкретный тип списка, он будет использовать наиболее подходящую перегрузку. Например:

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

При написании целых чисел это будет использовать Console.WriteLine(int), тогда как при написании строк он будет использовать Console.WriteLine(string). Если какая-либо конкретная перегрузка недоступна (или если вы используете общий List<T>, а компилятор не знает, что такое T), он будет использовать Console.WriteLine(object).

Обратите внимание, что использование Console.WriteLine как группы методов, кстати. Это более красноречиво, чем использование выражения лямбда, и на самом деле немного более эффективно (поскольку делегат будет просто вызовом Console.WriteLine, а не вызовом метода, который в свою очередь просто вызывает Console.WriteLine).

Ответ 3

В то время как ответы с List<T>.ForEach очень хорошие.

Я нашел String.Join<T>(string separator, IEnumerable<T> values) более полезным.

Пример:

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"

Примечания:

Если разделитель null, вместо него используется пустая строка (String.Empty). Если какой-либо элемент значений null, вместо него используется пустая строка.

Join(String, IEnumerable<String>) - метод удобства, который позволяет объединить каждый элемент в коллекции IEnumerable (Of String), не преобразовывая сначала элементы в массив строк. Это особенно полезно для выражений запроса языка с интегрированным запросом (LINQ).

Это должно отлично работать для проблемы, тогда как для других - значения массива. Используйте другие перегрузки этого же метода, String.Join Method (String, Object [])

Ссылка: https://msdn.microsoft.com/en-us/library/dd783876(v=vs.110).aspx

Ответ 4

Вы также можете использовать List inbuilt foreach, например:

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

Этот код также быстрее выполняет !

Вышеприведенный код также позволяет вам управлять Console.WriteLine, например:

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

Ответ 5

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

Ответ 6

Мне было легче понять это:

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

Ответ 7

Предположим, что нам нужно просмотреть некоторые данные в командной строке, которые поступают из таблицы базы данных. Сначала мы создаем список. Team_Details - это мой класс свойств.

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

Затем вы можете подключиться к базе данных и выполнить часть извлечения данных и сохранить ее в списке следующим образом.

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

Затем вы можете распечатать этот список в командной строке следующим образом.

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