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

Cod*_*der 76 c# arrays string

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

string myFunction(List<int> a) {
    return string.Join(",", a);
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 135

最好的方法是升级到.NET 4.0,其中存在一个可以满足您需要的重载:

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

    return string.Join(",", a.Select(x => x.ToString()).ToArray());
Run Code Online (Sandbox Code Playgroud)

  • 因为他会有一个List <int>.linq select将List <int>转换为IEnumerable <string>,然后转换为数组. (2认同)
  • .ToArray() 可以避免,因为 Join 方法接受 IEnumerable&lt;string&gt; (2认同)

win*_*och 8

在 .NET 中,列表类有一个.ToArray()方法。像这样的事情可以工作:

string myFunction(List<int> a)
{
    return string.Join(",", a.ToArray());
}
Run Code Online (Sandbox Code Playgroud)

参考:List<T> 方法(MSDN)


Del*_*ted 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

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

var listOfInts = new List<int> { 1, 2, 3, 4 };
Console.WriteLine(",".Join(listOfInts));
Run Code Online (Sandbox Code Playgroud)

请享用!

  • 如果有任何帮助,我会从Python中偷走这个想法! (2认同)