string.Join在一个List <int>或其他types上

我想将一个数组或整数列表转换成逗号分隔的string,如下所示:

string myFunction(List<int> a) { return string.Join(",", a); } 

但string.Join只有List<string>作为第二个参数。 做这个的最好方式是什么?

最好的办法是升级到.NET 4.0,在那里有一个你想要的超载:

  • String.Join<T>(String, IEnumerable<T>)

如果无法升级,可以使用Select和ToArray实现相同的效果。

  return string.Join(",", a.Select(x => x.ToString()).ToArray()); 

.NET 3.5的generics可枚举string连接的可伸缩安全的实现。 迭代器的用法是,连接string的值不会卡在string的末尾。 它可以正确使用0,1个元素:

 public static class StringExtensions { public static string Join<T>(this string joinWith, IEnumerable<T> list) { if (list == null) throw new ArgumentNullException("list"); if (joinWith == null) throw new ArgumentNullException("joinWith"); var stringBuilder = new StringBuilder(); var enumerator = list.GetEnumerator(); if (!enumerator.MoveNext()) return string.Empty; while (true) { stringBuilder.Append(enumerator.Current); if (!enumerator.MoveNext()) break; stringBuilder.Append(joinWith); } return stringBuilder.ToString(); } } 

用法:

 var arrayOfInts = new[] { 1, 2, 3, 4 }; Console.WriteLine(",".Join(arrayOfInts)); var listOfInts = new List<int> { 1, 2, 3, 4 }; Console.WriteLine(",".Join(listOfInts)); 

请享用!

.NET 2.0:

 static string IntListToDelimitedString(List<int> intList, char Delimiter) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < intList.Count; i++) { builder.Append(intList[i].ToString()); if (i != intList.Count - 1) builder.Append(Delimiter); } return builder.ToString(); } 

如果你不想进入.NET 4.0的深处,这个答案是适合你的。

String.Join()使用每个元素之间指定的分隔符连接string数组的所有元素。

语法是

 public static string Join( string separator, params string[] value ) 

我不build议您将Inyl List传递给Join方法,而是先build立一个string数组。

这是我build议的:

 static string myFunction(List<int> a) { int[] intArray = a.ToArray(); string[] stringArray = new string[intArray.Length]; for (int i = 0; i < intArray.Length; i++) { stringArray[i] = intArray[i].ToString(); } return string.Join(",", stringArray); } 

有一个类似的扩展方法,我修改为此

 public static class MyExtensions { public static string Join(this List<int> a, string splitChar) { return string.Join(splitChar, a.Select(n => n.ToString()).ToArray()); } } 

你就这样使用它

 var test = new List<int>() { 1, 2, 3, 4, 5 }; string s = test.Join(","); 

.NET 3.5

使用.NET 4.0

 public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string s = myFunction(PopulateTestList()); this.TextBox1.Text = s; } protected List<int> PopulateTestList() { List<int> thisList = new List<int>(); thisList.Add(22); thisList.Add(33); thisList.Add(44); return thisList; } protected string myFunction(List<int> a) { return string.Join(",", a); } } 

在.NET中,列表类有一个.ToArray()方法。 像这样的东西可以工作:

 string myFunction(List<int> a) { return string.Join(",", a.ToArray()); } 

Ref: List <T>方法 (MSDN)