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(myArray, Convert.ToString)) 

为了这个目的, 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);