Строка. Присоединение к списку <int>или другой тип - PullRequest
75 голосов
/ 31 августа 2010

Я хочу превратить массив или список целых чисел в строку с разделителями-запятыми, например:

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

Но string.Join принимает только List<string> в качестве второго параметра. Каков наилучший способ сделать это?

Ответы [ 7 ]

134 голосов
/ 31 августа 2010

Лучший способ - это обновить до .NET 4.0, где есть перегрузка, которая делает то, что вы хотите:

Если вы не можете выполнить обновление, вы можете добиться того же эффекта, используя Select и ToArray.

    return string.Join(",", a.Select(x => x.ToString()).ToArray());
5 голосов
/ 31 августа 2010

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

Наслаждайтесь!

3 голосов
/ 31 августа 2010

.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 голосов
/ 31 августа 2010

Использование .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);
    }
}
2 голосов
/ 31 августа 2010

Был подобный метод расширения, который я изменил для этого

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

2 голосов
/ 31 августа 2010

Этот ответ для вас, если вы пока не хотите углубляться в глубины .NET 4.0.

String.Join () объединяет все элементы массива строк, используя указанный разделитель между каждым элементом.

Синтаксис

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

Вместо того, чтобы передавать свой список целых чисел методу 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);
}
1 голос
/ 01 апреля 2014

В .NET класс списка имеет метод .ToArray(). Примерно так может работать:

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

Ссылка: Список Методы (MSDN)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...