You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何正确使用Join方法拼接StringCollection元素?

问题原因

直接调用string.Join()输出类型名称的核心原因是:StringCollection仅实现了非泛型IEnumerable接口,未实现泛型IEnumerable<string>接口。你当前调用的string.Join重载会把传入的StringCollection实例当作单个参数处理,直接调用其ToString()方法,最终返回类型的全限定名System.Collections.Specialized.StringCollection。

正确实现方案

你可以根据项目的依赖和运行时版本,选择以下任意一种方式实现拼接:

  • 方式1:借助LINQ的Cast<string>()转换集合类型(最简洁,推荐)
    先引入System.Linq命名空间,将集合元素显式转换为string类型后传入string.Join即可:
using System.Collections.Specialized;
using System.Linq;

[TestMethod]
public void TestJoin()
{
    StringCollection stringCollection = new StringCollection() { "Denis", "Jason", "Shawn" };
    string result = string.Join(", ", stringCollection.Cast<string>());
    Assert.AreEqual("Denis, Jason, Shawn", result);
}
  • 方式2:不依赖LINQ,通过自带的CopyTo方法转为字符串数组
    如果项目中不方便引入LINQ,可以先把StringCollection的元素拷贝到字符串数组,再传入Join方法:
using System.Collections.Specialized;

[TestMethod]
public void TestJoin()
{
    StringCollection stringCollection = new StringCollection() { "Denis", "Jason", "Shawn" };
    string[] strArray = new string[stringCollection.Count];
    stringCollection.CopyTo(strArray, 0);
    string result = string.Join(", ", strArray);
    Assert.AreEqual("Denis, Jason, Shawn", result);
}
  • 方式3:高版本.NET直接调用(.NET Core 2.0+ / .NET 5+ 支持)
    新版框架中string.Join新增了接收非泛型IEnumerable参数的重载,只要你的项目运行时满足版本要求,可以直接传入StringCollection实例,方法内部会自动遍历集合元素做拼接。需要注意如果集合中存在非string类型的元素,方法会自动调用其ToString()方法转换,不会抛出类型异常。

内容的提问来源于stack exchange,提问作者Denis G. Labrecque

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:27:15