创建逗号分隔列表和删除尾随逗号的优雅方式

时间:2013-03-07 21:27:05

标签: c#

当我生成以逗号分隔的列表时,我讨厌如何删除尾随的逗号。

有更好的方法吗?我经常这样做,所以寻找意见。

for(int x = 0; x < list.Count; x++)
{
  sb.Append(list[x].Name);
  sb.Append(",");
}

var result = sb.toString().Substring(0, result.length - 2);

5 个答案:

答案 0 :(得分:22)

使用String.Join和Linq的IEnumerable.Select扩展方法。

var str = String.Join(",", list.Select(x => x.Name));

答案 1 :(得分:6)

描述

您可以使用String.JoinEnumerable.Select(命名空间System.Linq)方法

  

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

     

Enumerable.Select 将序列的每个元素投影到新表单中。

示例

String.Join(",", list.Select(x => x.Name));

更多信息

答案 2 :(得分:3)

基本情况:

string.Join(",",list.Select(l => l.Name));

使用空检查:

string.Join(",",list.Where(l => l != null).Select(l => l.Name));

使用空/空检查:

string.Join(",",list.Where(l => !string.IsNullOrEmpty(l)).Select(l => l.Name));

修剪:

string.Join(",",list.Select(l => l.Name.Trim()));

同时:

string.Join(",",list.Where(l => !string.IsNullOrEmpty(l)).Select(l => l.Name.Trim()));

答案 3 :(得分:1)

如果性能是一个问题,我不建议这样做,但是可以使用LINQ的Aggregate方法进行这样的连接。

e.g。

using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication14
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Example> list = new List<Example>()
            {
                new Example() { Name = "John Doe" },
                new Example() { Name = "Jane Doe" },
                new Example() { Name = "Fred Doe" },
            };

            string s = list.Select(item => item.Name)
                           .Aggregate((accumulator, iterator) => accumulator += "," + iterator);
        }
    }

    public class Example
    {
        public string Name { get; set; }
    }
}

但是,如果您的加入逻辑最终变得更复杂(这是罕见的,我会怀疑),这可能很有用。

答案 4 :(得分:0)

没有Join

的一个不优雅的解决方案
for(int x = 0; x < list.Count; x++)
{
    if (x > 0)
        sb.Append(",");

    sb.Append(list[x].Name);
}


var result = sb.toString();