使用分隔的ArrayList

时间:2017-10-02 15:54:19

标签: c# string arraylist

我的ArrayList对象包含3个值。

ArrayList arr=new ArrayList()
arr.Add("abc");
arr.Add("def");
arr.Add("ghi");

我已经要求使用分隔符

分隔值

所以,我用谷歌搜索并得到了解决方案

string afterjoined=string.Join(",", (string[])arr.ToArray(Type.GetType("System.String")));

以上代码将以

的形式返回
  

ABC,DEF,GHI

但是上面的代码不允许任何字符串与它连接。

我想要一个特殊字符串,需要与最终的分隔值连接,如下所示,

  

MYabc,MYdef,Myghi

这是我尝试使用现有代码(不起作用)

string afterjoined=string.Join(",", "MYabc"+(string[])arr.ToArray(Type.GetType("System.String")));

2 个答案:

答案 0 :(得分:5)

这就是你需要的:

string.Join(",", 
    arr.Cast<string>() // use cast here instead of the casting to reduce the number of ()s
    .Select(x => "MY" + x))

Select调用通过执行指定的转换来转换列表中的每个字符串。在这种情况下,它是"MY" + x,因此它会在MY前加上数组中的每个元素。

为什么使用ArrayLists?它们不是类型安全的。您应该使用List<T>代替。代码将变得更加清洁:

List<string> arr=new List<string>();
arr.Add("abc");
arr.Add("def");
arr.Add("ghi");
string joined = string.Join(",", arr.Select(x => "MY" + x));

答案 1 :(得分:1)

如果我需要该功能,我会使用此扩展方法(通常使用通用IEnumerable,已针对ArrayList进行修改):

    public static string MergeWithPrefix(this ArrayList list, string prefix, string separator = ";")
    {
        var sb = new StringBuilder(list.Count * 16);

        foreach (var item in list)
            sb.Append(prefix).Append(item).Append(separator);
        sb.Remove(sb.Length - separator.Length, separator.Length);

        return sb.ToString();
    }