我有一个包含所有数据库名称的 List。我必须在控制台中显示该列表中包含的项(使用 Console.WriteLine())。我怎么才能做到呢?
List
Console.WriteLine()
假设项目适当地覆盖 ToString:
ToString
public void WriteToConsole(IEnumerable items) { foreach (object o in items) { Console.WriteLine(o); } }
(在这个循环中使用泛型没有什么好处——无论如何我们最终都会调用 Console.WriteLine(object),所以它仍然会像在本例中的 foreach部分那样进行装箱。)
Console.WriteLine(object)
foreach
编辑: 使用 List<T>.ForEach的答案是非常好的。
List<T>.ForEach
如果你有一个任意的序列(例如 LINQ 表达式的结果) ,那么上面的循环更加灵活,但是如果你肯定有一个 List<T>,我会说 List<T>.ForEach是一个更好的选择。
List<T>
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(int)
Console.WriteLine(string)
T
顺便说一下,请注意 Console.WriteLine作为方法组的用法。这比使用 lambda 表达式更简洁,而且实际上 有点更有效(因为委托将 只是作为对 Console.WriteLine的调用,而不是对方法的调用,后者只调用 Console.WriteLine)。
Console.WriteLine
您还可以使用 List 的内置 foreach,例如:
List<T>.ForEach(item => Console.Write(item));
此代码也运行 意义重大更快!
上面的代码还使您能够操作 Console. WriteLine,例如:
List<T>.ForEach(item => Console.Write(item + ",")); //Put a,b etc.
实际上,您可以做得很简单,因为列表有一个 ForEach方法,而且您可以将 Console.WriteLine作为一个方法组传入。然后编译器将使用隐式转换将方法组转换为 Action<int>,并从该组中选择最具体的方法,在本例中为 Console.WriteLine(int):
ForEach
Action<int>
var list = new List<int>(Enumerable.Range(0, 50)); list.ForEach(Console.WriteLine);
也可以使用字符串 =)
完全迂腐(我不是建议改变你的答案——只是出于兴趣而评论) Console.WriteLine是一个方法组。然后,编译器使用从方法组到 Action<int>的隐式转换,选择最具体的方法(本例中为 Console.WriteLine(int))。
Console.WriteLine(string.Join<TYPE>("\n", someObjectList));
而 List<T>.ForEach的答案是非常好的。
我发现 String.Join<T>(string separator, IEnumerable<T> values)方法更有用。
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"
备注:
如果分隔符为 无效,则改为使用空字符串(String.Empty)。如果值的任何成员是 无效,则使用空字符串代替。
String.Empty
Join(String, IEnumerable<String>)是一种方便的方法,它允许您在不首先将元素转换为字符串数组的情况下连接 IEnumable (Of String)集合中的每个元素。它对于语言集成查询(LINQ)查询表达式特别有用。
Join(String, IEnumerable<String>)
对于这个问题,这应该可以很好地解决,而对于其他问题,则需要使用数组值。使用同一方法的其他重载 连接方法(String,Object [])
参考资料: https://msdn.microsoft.com/en-us/library/dd783876(v=vs.110).aspx
我发现这很容易理解:
List<string> names = new List<string> { "One", "Two", "Three", "Four", "Five" }; for (int i = 0; i < names.Count; i++) { Console.WriteLine(names[i]); }
假设我们需要在命令提示符中查看来自数据库表的一些数据。首先我们创建一个列表。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); }