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
相关产品推荐
相关产品推荐

