строка.Присоединиться к списку или другому типу
Я хочу превратить массив или список ints в строку с разделителями-запятыми, например:
string myFunction(List<int> a) {
return string.Join(",", a);
}
но string.Регистрация только занимает List<string>
в качестве второго параметра. Каков наилучший способ сделать это?
7 ответов:
лучший способ-перейти на .NET 4.0, где есть перегрузка, которая делает то, что вы хотите:
Если вы не можете обновить, вы можете достичь того же эффекта с помощью Select и ToArray.
return string.Join(",", a.Select(x => x.ToString()).ToArray());
A масштабируемость и безопасное реализация общего перечисляемого соединения строк для .NET 3.5. Использование итераторов таково, что значение строки соединения не застревает в конце строки. Он работает правильно с 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.
строку.Join () объединяет все элементы строкового массива, используя указанный разделитель между каждым элементом.
синтаксис
public static string Join( string separator, params string[] value )
вместо того, чтобы передавать свой список int в метод Join, я предлагаю сначала создать массив строк.
вот что я предлагаю:
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 класс list имеет
.ToArray()
метод. Что-то вроде этого может работать:string myFunction(List<int> a) { return string.Join(",", a.ToArray()); }
Ref: List Methods (MSDN)