如何从ArrayList中创build逗号分隔的string?

我将Ids的ArrayList存储在一个处理脚本中,我想将其作为逗号分隔列表吐出,以便输出到debugging日志。 有没有办法,我可以很容易得到这个没有循环的事情?

编辑:感谢Joel指出在.net 2.0及更高版本中可用的列表(T)。 如果你有它可以使事情变得更容易。

是的,我正在回答我自己的问题,但我还没有在这里find它,并认为这是一个相当光滑的事情:

…在VB.NET中:

String.Join(",", CType(TargetArrayList.ToArray(Type.GetType("System.String")), String())) 

…在C#中

 string.Join(",", (string[])TargetArrayList.ToArray(Type.GetType("System.String"))) 

唯一的问题是如果你使用Option Strict来确保转换正确的话,那么ArrayList必须包含作为string存储的项目。

编辑:如果您使用.net 2.0或更高版本,只需创build一个列表(string)types的对象,你可以得到你所需要的。 非常感谢乔尔提出这个!

 String.Join(",", TargetList.ToArray()) 

迄今为止的解决scheme都非常复杂。 惯用的解决scheme应该是:

 String.Join(",", x.Cast(Of String)().ToArray()) 

在新的框架版本中不需要花哨的杂技。 假设一个不太现代的版本,下面是最简单的:

 Console.WriteLine(String.Join(",", CType(x.ToArray(GetType(String)), String()))) 

mspmsp的第二个解决scheme也是一个不错的方法,但它不工作,因为它错过了AddressOf关键字。 另外, Convert.ToString效率相当低(大量不必要的内部评估), Convert类一般不是很干净的devise。 我倾向于避免它,尤其是因为它是完全多余的。

就像是:

 String.Join(",", myArrayList.toArray(string.GetType()) ); 

基本上循环你知道…

编辑

怎么样:

 string.Join(",", Array.ConvertAll<object, string>(a.ToArray(), Convert.ToString)); 

string.Join(" ,", myArrayList.ToArray()); 这将与.net框架4.5

 foo.ToArray().Aggregate((a, b) => (a + "," + b)).ToString() 

要么

 string.Concat(foo.ToArray().Select(a => a += ",").ToArray()) 

下面是一个简单的例子,演示了如何使用string列表中的String.Join()创build一个以逗号分隔的string:

 List<string> histList = new List<string>(); histList.Add(dt.ToString("MM/dd/yyyy::HH:mm:ss.ffff")); histList.Add(Index.ToString()); /*arValue is array of Singles */ foreach (Single s in arValue) { histList.Add(s.ToString()); } String HistLine = String.Join(",", histList.ToArray());