C#IEnumerable to string
出于日志记录的目的,我想调用object []数组上每个对象的.ToString()
方法。 我怎样才能以最简单的方式做到这一点?
说我有:
myArray = new Object[]{"astring",1, Customer} Log(????);
我怎样才能传递一个字符串,例如它的值等于:
"astring".ToString()+1.ToString()+Customer.ToString()
或者更好,每个值之间使用逗号。
像这样:
Log(String.Join(", ", myArray.Select(o => o.ToString()).ToArray()));
更新:
从框架4开始, Join
方法也可以采用IEnumerable
,因此您不需要ToArray
:
Log(String.Join(", ", myArray.Select(o => o.ToString())));
我经常使用……
String.Join(", ", Array.ConvertAll
为了这个目的, MoreLINQ有一个ToDelimitedString
方法。
它使用StringBuilder
而不是使用String.Join
(从我之前的问题中记得,两种方法的效率在很大程度上取决于输入),但它很简单。 这是核心代码(有几个包装器允许默认分隔符):
private static string ToDelimitedStringImpl (IEnumerable source, string delimiter) { Debug.Assert(source != null); Debug.Assert(delimiter != null); var sb = new StringBuilder(); foreach (var value in source) { if (sb.Length > 0) sb.Append(delimiter); sb.Append(value); } return sb.ToString(); }
一种简单的旧时尚方式:
string myString = ""; foreach(Object o in myArray) myString += o.ToString() + ", "; // Remove the extra comma if(myString.Length >=2) myString.Remove(myString.Length - 2);