При условии, что элементы переопределяют ToString
соответственно:
public void WriteToConsole(IEnumerable items)
{
foreach (object o in items)
{
Console.WriteLine(o);
}
}
(Не было бы никакого преимущества в использовании обобщений в этом цикле - мы все равно в конечном итоге бы вызвали Console.WriteLine(object)
, поэтому он все равно будет работать так же, как и в части foreach
в этом случае.)
РЕДАКТИРОВАТЬ: ответы с использованием 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
).