String.Join in list <int> or other type

I want to turn an array or int list into a comma delimited string, for example:

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

But string.Join only accepts List<string> as the second parameter. What is the best way to do this?

+57
string arrays c #
Aug 31 '10 at 15:16
source share
7 answers

The best way is to upgrade to .NET 4.0, where there is an overload that does what you want:

If you cannot update, you can achieve the same effect using Select and ToArray.

  return string.Join(",", a.Select(x => x.ToString()).ToArray()); 
+105
Aug 31 '10 at 15:17
source share

A scalable and secure implementation of common enumerable string concatenation for .NET 3.5. The use of iterators is that the value of the join string does not get stuck at the end of the string. It works correctly with 0, 1 or more elements:

 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(); } } 

Using:

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

Enjoy it!

+4
Aug 31 '10 at 15:52
source share

.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(); } 
+2
Aug 31 '10 at 15:43
source share

This answer is for you if you do not want to venture into the depths of .NET 4.0.

String.Join () concatenates all elements of a string array using the specified delimiter between each element.

Syntax

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

Instead of passing your list of int objects to the Join method, I suggest creating an array of strings first.

Here is what I suggest:

 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); } 
+1
Aug 31 '10 at 15:24
source share

Had a similar extension method that I modified for this

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

and you use it like this

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

.NET 3.5

+1
Aug 31 '10 at 15:32
source share

Using .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); } } 
0
Aug 31 '10 at 16:05
source share

In .NET, the list class has a .ToArray() method. Something like this might work:

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

Ref: List of <T> Methods (MSDN)

0
Mar 31 '14 at 23:08
source share



All Articles