如何从ArrayList创建逗号分隔的字符串?

时间:2008-10-17 18:28:39

标签: c# vb.net parsing

我将Ids的ArrayList存储在一个处理脚本中,我希望将其作为逗号分隔列表吐出,以输出到调试日志。有没有办法在没有循环的情况下轻松搞定?

编辑:感谢Joel指出.net 2.0及以上版本中可用的List(Of T)。如果你有它可以使TONS更容易。

7 个答案:

答案 0 :(得分:139)

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

...在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必须将项目存储为字符串。

编辑:如果您使用的是.net 2.0或更高版本,只需创建一个List(Of String)类型对象,您就可以获得所需的内容。非常感谢Joel提出这个问题!

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

答案 1 :(得分:17)

到目前为止,解决方案都非常复杂。惯用的解决方案无疑应该是:

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

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

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

mspmsp的第二个解决方案也是一个不错的方法,但由于它错过了AddressOf关键字而无法正常工作。此外,Convert.ToString效率相当低(许多不必要的内部评估),而Convert类通常设计得不是很干净。我倾向于避免它,特别是因为它完全是多余的。

答案 2 :(得分:16)

类似的东西:

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

基本上循环你知道...

修改

怎么样:

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

答案 3 :(得分:7)

string.Join(" ,", myArrayList.ToArray());这适用于.net framework 4.5

答案 4 :(得分:1)

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

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

更新,因为这是非常古老的。当然,你应该使用string.Join。在撰写本文时,它并不存在作为一种选择。

答案 5 :(得分:1)

这是一个简单的示例,演示了如何使用字符串列表中的String.Join()创建逗号分隔的字符串:

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());

答案 6 :(得分:0)

到目前为止,我发现这是一个很好且快速的解决方案

//CPID[] is the array
string cps = "";
if (CPID.Length > 0)
{   
    foreach (var item in CPID)
    {
        cps += item.Trim() + ",";
    }
}
//Use the string cps