У меня есть List
, который содержит все имена баз данных. Мне нужно разобрать элементы, содержащиеся в этом списке в консоли (с помощью Console.WriteLine()
). Как я могу достичь этого?
Как отображать элементы списка в окне консоли в С#
Ответ 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);
}