string.Join on List <int>或其他类型</int>

时间:2010-08-31 15:16:05

标签: c# arrays string

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

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

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

7 个答案:

答案 0 :(得分:133)

最好的方法是升级到.NET 4.0,其中存在执行所需的重载:

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

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

答案 1 :(得分:5)

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

享受!

答案 2 :(得分:3)

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

答案 3 :(得分:2)

如果你不想冒险进入.NET 4.0的深度,那么这个答案适合你。

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

语法是

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

我建议首先建立一个字符串数组,而不是将你的List列表传递给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);
}

答案 4 :(得分:2)

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

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

答案 5 :(得分:2)

使用.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);
    }
}

答案 6 :(得分:1)

在.NET中,列表类具有.ToArray()方法。这样的事情可以奏效:

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

参考: List<T> Methods (MSDN)