【问题标题】:Convert Array List to Comma Separated String in C#在 C# 中将数组列表转换为逗号分隔的字符串
【发布时间】:2015-06-18 13:17:56
【问题描述】:

我正在使用 String.Join 尝试将数组列表转换为逗号分隔的字符串,例如

xxx@xxx.com,yyy@xxx.com,zzz@xxx.com,www@xxx.com

我似乎无法让语法正常工作。

这是我正在尝试的:

    for (i = 0; i < xxx; i++)
    {
        MailingList = arrayList[i].ToString();
        MailingList = string.Join(", ", MailingList.ToString());
        Response.Write(MailingList.ToString());
    }

你能帮帮我吗?

提前谢谢你-

【问题讨论】:

  • arrayList 的类型是什么?
  • 所以你想连接你的arrayList 的内容?也就是说,arrayListList&lt;string&gt;?
  • @AntonioMailtraq 你的意思是声明是string arrayList=... 吗?那时你不需要加入任何东西。更有可能是string[] arrayListList&lt;string&gt; arrayList 甚至ArrayList arrayList。是哪个?
  • @Panagiotis arrayList.AddRange(ListBox.Items);
  • 请在问题本身中发布所有相关信息。您有一个 ArrayList,您将在其中输入 ListItemCollection 对象。没有这些信息,就不可能给出真正有效的答案。该问题建议您最多有一个 ArrayList 包含字符串数组或 List 或类似的东西

标签: c# asp.net arrays


【解决方案1】:

根据您的变量名称 (arrayList) 猜测,您有 List&lt;string[]&gt; 或那里的等效类型。

这里的问题是您在阵列上调用ToString()。 试试这个:

for (i = 0; i < xxx; i++)
{
    var array = arrayList[i];
    MailingList = string.Join(", ", array);
    Response.Write(MailingList);
}

编辑:如果arrayList 只是一个包含字符串的ArrayList,你可以这样做

Response.Write(string.Join(", ", arrayList.OfType<string>()));

我个人会尽可能避免使用非泛型集合(例如ArrayList),并使用来自System.Collections.Generic 的强类型集合,例如List&lt;string&gt;。例如,如果你有一段代码依赖ArrayList的所有内容都是字符串,如果你不小心添加了一个不是字符串的项目,它将遭受灾难性的影响。

编辑 2:如果您的 ArrayList 实际上包含您在评论中提到的 System.Web.UI.WebControls.ListItems:arrayList.AddRange(ListBox.Items);,那么您将需要使用它:

Response.Write(string.Join(", ", arrayList.OfType<ListItem>()));

【讨论】:

  • 嗯,感谢您的反馈 - 您能否补充一下到底是什么不起作用?它有例外吗?
  • 在输出中我有 xxx@xxx.comyyy@xxx.comzzz@xxx.comwww@xxx.com
  • @AntonioMailtraq 试试我添加的第二种方法。
  • @AntonioMailtraq 将using System.Linq; 添加到文件顶部。
【解决方案2】:

String.Join 的第二个参数必须是 IEnumerable。将MailingList.ToString() 替换为arrayList,它应该可以工作。

【讨论】:

  • for 切换到 foreach 应该处理包含任何其他可枚举的 ArrayList
  • @ClaudioRedi:是的,你是对的。任何实现 IEnumerable 的东西似乎都很好,因为数组和 IEnumerable&lt;T&gt; 都实现了它。
  • 我相信只有泛型可枚举 (IEnumerable&lt;string&gt;) 或数组才能工作。它可能需要测试并检查所有方法重载以确认它。
  • 如果它实际上是一个ArrayList,则它不适用于String.Join。通过 LINQ 轻松修复 .ToArray: i.imgur.com/8WKZ3WM.png
  • 或者更好的是,OfType&lt;string&gt;() 以防它包含不是字符串的对象
【解决方案3】:

初始化:

string result = string.Empty;

对于值类型:

if (arrayList != null) {
   foreach(var entry in arrayList){
      result += entry + ',';
   }
}

对于引用类型:

if (arrayList != null) {
   foreach(var entry in arrayList){
      if(entry != null)
         result += entry + ',';
   }
}

和清理:

if(result == string.Empty)
   result = null;
else
   result = result.Substring(0, result.Length - 1);

【讨论】:

  • 为什么要重新发明 String.Join?
  • 另外,如果你要重新发明它,StringBuilder 可能是一个更好的选择,而不是字符串连接。
  • @PanagiotisKanavos 我认为这是个人喜好。我喜欢自己编写简单的方法,而不是使用 .Net 的东西。
  • @cubrr 是的,那将是一个更好的选择 :)
【解决方案4】:

大部分答案已经存在,仍在发布完整的工作 sn-p

string[] emailListOne = { "xxx@xxx.com", "yyy@xxx.com", "zzz@xxx.com", "www@xxx.com" };
string[] emailListTwo = { "xxx@xxx1.com", "yyy@xxx1.com", "zzz@xxx1.com", "www@xxx1.com" };
string[] emailListThree = { "xxx@xxx2.com", "yyy@xxx2.com", "zzz@xxx2.com", "www@xxx.com" };
string[] emailListFour = { "xxx@xxx3.com", "yyy@xxx3.com", "zzz@xxx3.com", "www@xxx3.com" };

List<string[]> emailArrayList = new List<string[]>();
emailArrayList.Add(emailListOne);
emailArrayList.Add(emailListTwo);
emailArrayList.Add(emailListThree);
emailArrayList.Add(emailListFour);

StringBuilder csvList = new StringBuilder();
int i = 0;
foreach (var list in emailArrayList)
{
   csvList.Append(string.Join(",", list));
   if(i < emailArrayList.Count - 1)
      csvList.Append(",");
   i++;
}
Response.Write(csvList.ToString());

【讨论】:

  • 为什么这比 String.Join 更好?
  • 我从来没有说过,而是使用相同的,我只是发布了一个完整的代码@PanagiotisKanavos
  • @manish 如果您查看 OP 的代码,您会注意到他直接从 foreach 循环写入响应,而不是首先收集所有字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2012-01-17
相关资源
最近更新 更多