【问题标题】:Concatenating Own Strings with the Separated ArrayList用分离的 ArrayList 连接自己的字符串
【发布时间】:2017-10-02 15:54:18
【问题描述】:

我的 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")));

【问题讨论】:

  • 你使用ArrayList而不是List<string>有什么原因吗?
  • 其实我正在开发一个SSIS包。所以我必须使用 ArrayList 读取文件中的所有行

标签: c# string arraylist


【解决方案1】:

这是你需要的:

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&lt;T&gt;。代码会变得更简洁:

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

【讨论】:

    【解决方案2】:

    如果我需要该功能,我会使用此扩展方法(通常使用通用 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();
        }
    

    【讨论】:

      猜你喜欢
      • 2013-03-30
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 2017-10-31
      • 1970-01-01
      • 2015-09-26
      相关资源
      最近更新 更多