当我生成以逗号分隔的列表时,我讨厌如何删除尾随的逗号。
有更好的方法吗?我经常这样做,所以寻找意见。
for(int x = 0; x < list.Count; x++)
{
sb.Append(list[x].Name);
sb.Append(",");
}
var result = sb.toString().Substring(0, result.length - 2);
答案 0 :(得分:22)
使用String.Join和Linq的IEnumerable.Select扩展方法。
var str = String.Join(",", list.Select(x => x.Name));
答案 1 :(得分:6)
您可以使用String.Join
和Enumerable.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();