将一个 IList<int> 集合转换为逗号分隔的列表。

6
有没有一种优雅的方法将IList集合转换为逗号分隔的ID字符串?
"1,234,2,324,324,2"

这个问题不是和你之前的问题非常相似吗? - Yuriy Faktorovich
6个回答

16
    IList<int> list = new List<int>( new int[] { 1, 2, 3 } );
    Console.WriteLine(string.Join(",", list));

无法正常工作。ForEach() 方法在 List<T> 上定义,而不是 IList<T>。 - Reed Copsey
不需要调用 ToArray。所使用的 string.Join 重载操作的是 IEnumerable<string> - Stefan Glienke
好的,已修复。我不记得9年前为什么要加那个了。 - Ed S.
@EdS。这个重载是在.NET 4.0中添加的,而你写这个答案的两周后就发布了。现在也有一个通用的重载,所以不需要使用Select,只需传入一个IEnumerable<T>(在这种情况下是int),它会为您获取每个值的字符串值。(该重载也同时添加)。 - Servy
@Servy:那很有道理。 - Ed S.

5

你可以做:

// Given: IList<int> collection;

string commaSeparatedInts = string.Join(",",collection.Select(i => i.ToString()).ToArray());

3
这将完成它。
IList<int> strings = new List<int>(new int[] { 1,2,3,4 });
string[] myStrings = strings.Select(s => s.ToString()).ToArray();
string joined = string.Join(",", myStrings);

或者完全使用Linq

string aggr = strings.Select(s=> s.ToString()).Aggregate((agg, item) => agg + "," + item);

3
// list = IList<MyObject>

var strBuilder = new System.Text.StringBuilder();

foreach(var obj in list)
{
  strBuilder.Append(obj.ToString());
  strBuilder.Append(",");
}

strBuilder = strBuilder.SubString(0, strBuilder.Length -1);
return strBuilder.ToString();

1
一个不错的选择,我一直发现 StringBuilder 在连接字符串方面更快。如果列表的大小很大,它尤其有用! - Alastair Pitts
StringBuilder.SubString不存在,你需要使用StringBuilder.ToString(int startIndex, int length)。 - Trillian

0
mstrickland提出了一个好主意,使用字符串构建器可以更快地处理较大的列表。然而,你不能将字符串构建器设置为字符串。请尝试使用以下方法。
    var strBuilder = new StringBuilder();

    foreach (var obj in list)
    {
        strBuilder.Append(obj.ToString());
        strBuilder.Append(",");
    }

    return strBuilder.ToString(0, strBuilder.Length - 1); 

0
List<int> intList = new List<int>{1,234,2,324,324,2};
var str = intList.Select(i => i.ToString()).Aggregate( (i1,i2) => string.Format("{0},{1}",i1,i2));
Console.WriteLine(str);

如果对回答进行了负评,留下为什么进行负评的评论会很有帮助。 这是一个完全合法的问题解决方案! - Abhijeet Patel
是的,这是合法的,只是不是最简单的方法。排名系统只是为了将最佳答案排在前面。 - Ed S.
我想,只有当答案不正确、不准确或缺乏细节时,才会被投票否决。这里发布的大多数使用LINQ的答案并不一定是“简单”的! - Abhijeet Patel
我同意你的观点,Abhijeet。投票赞成是为了排名,投票反对则是为了指出错误。我将你的分数重置为0。 - dano

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