将List<int>转换为逗号分隔值的字符串

28

如果有一个整数的List<int>(例如:1 - 3 - 4),我该如何将它转换为以下类型的字符串?

例如,输出应为:

string values = "1,3,4";
6个回答

114
var nums = new List<int> {1, 2, 3};
var result = string.Join(", ", nums);

5
请注意,这在 .NET 3.5 及其之前版本中不起作用(第二个参数必须是一个 string[])。请参考 Albin Sunnanbo 的答案。 - Itison
1
最合适和干净的解决方案。 - ZooZ

20
var ints = new List<int>{1,3,4};
var stringsArray = ints.Select(i=>i.ToString()).ToArray();
var values = string.Join(",", stringsArray);

谢谢Albin. E。对于反转任务,我需要从一个带逗号的整数字符串中获取List<int>。Luigi - Ciupaz
5
在.NET 4中,String.Join提供了一个重载方法,接受一个IEnumerable<T>参数,因此可以在不使用中间数组的情况下完成字符串连接(此重载方法对每个输入元素调用ToString()方法):string.Join(",", ints) - Richard
1
@Ciupaz,对于反向任务,请使用String.Split() - Albin Sunnanbo

15

另一种解决方案是使用Aggregate。这被认为比提供的其他解决方案慢得多

var ints = new List<int>{1,2,3,4};
var strings =
            ints.Select(i => i.ToString(CultureInfo.InvariantCulture))
                .Aggregate((s1, s2) => s1 + ", " + s2);

看下面的评论,你就会知道为什么不应该使用它。改用String.JoinStringBuilder


6
创建像这样的字符串(尤其是列表很长时)的劣质解决方案以臭名昭著。使用String.Join或StringBuilder是正确的方法。令人遗憾的是,一个低质量的提问者甚至不知道如何接受最佳答案,对于Stack Overflow来说是个悲哀。 - Gert Arnold
5
我同意你的观点。我只是想展示另一个解决方案,忘记提及任何性能方面的内容。我尝试删除这个答案,但无法删除。我会更新答案以不使用它。 - Martijn B
完美的,这样就可以了。谢谢。 - Ciupaz

0
使用Stringify.Library NuGet包。
示例1(默认分隔符隐式地采用逗号)。
string values = "1,3,4";
var output = new StringConverter().ConvertFrom<List<int>>(values);

示例2(显式指定分隔符)

string values = "1 ; 3; 4";
var output = new StringConverter().ConvertFrom<List<int>>(values), new ConverterOptions { Delimiter = ';' });

0
public static string ToCommaString(this List<int> list)
{
    if (list.Count <= 0)
        return ("");
    if (list.Count == 1)
        return (list[0].ToString());
    System.Text.StringBuilder sb = new System.Text.StringBuilder(list[0].ToString());
    for (int x = 1; x < list.Count; x++)
        sb.Append("," + list[x].ToString());
    return (sb.ToString());
}

public static List<int> CommaStringToIntList(this string _s)
{
    string[] ss = _s.Split(',');
    List<int> list = new List<int>();
    foreach (string s in ss)
        list.Add(Int32.Parse(s));
    return (list);
}

使用方法:

String s = "1,2,3,4";
List<int> list = s.CommaStringToIntList();
list.Add(5);
s = list.ToCommaString();
s += ",6";
list = s.CommaStringToIntList();

为什么你要发布这个替代方案,当已经有一些使用string.Join()的非常紧凑的解决方案了呢? - R. Schreurs

0

你可以使用委托来实现同样的功能

List<int> intList = new List<int>( new int[] {20,22,1,5,1,55,3,10,30});
string intStringList = string.Join(",", intList.ConvertAll<string>(delegate (int i) { return i.ToString(); });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接