我有一个List
,其中包含所有数据库名称。我必须在控制台中显示该列表中包含的项目(使用Console.WriteLine()
)。我怎样才能做到这一点?
答案 0 :(得分:50)
实际上,您可以非常简单地执行此操作,因为该列表具有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)
)。
答案 1 :(得分:23)
假设项目适当地覆盖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
作为方法组。这比使用lambda表达式更简洁,实际上略微更高效(因为委托将只是调用Console.WriteLine
,而不是调用一种方法,反过来只调用Console.WriteLine
)。
答案 2 :(得分:17)
虽然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
答案 3 :(得分:14)
您还可以使用List的内置foreach,例如:
List<T>.ForEach(item => Console.Write(item));
此代码还可以更快地运行 !
上面的代码还使您能够操作Console.WriteLine,例如:
List<T>.ForEach(item => Console.Write(item + ",")); //Put a,b etc.
答案 4 :(得分:7)
Console.WriteLine(string.Join<TYPE>("\n", someObjectList));
答案 5 :(得分:1)
我发现这更容易理解:
List<string> names = new List<string> { "One", "Two", "Three", "Four", "Five" };
for (int i = 0; i < names.Count; i++)
{
Console.WriteLine(names[i]);
}
答案 6 :(得分:0)
假设我们需要在命令提示符下查看一些来自数据库表的数据。首先,我们创建一个列表。 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);
}