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)