用逗号分隔列表,用“和”代替最后一个逗号

我想在C#中创建一个以逗号分隔的列表,其中单词“and”作为最后一个分隔符。

string.Join(", ", someStringArray) 

会产生这样的字符串

 Apple, Banana, Pear 

但我希望它看起来像这样:

 Apple, Banana and Pear 

是否有一种简单的方法可以使用Linq实现它而不使用循环?

您可以对除最后一项之外的所有项目进行加入,然后手动添加最后一项:

 using System; using System.Linq; namespace Stackoverflow { class Program { static void Main(string[] args) { DumpResult(new string[] { }); DumpResult(new string[] { "Apple" }); DumpResult(new string[] { "Apple", "Banana" }); DumpResult(new string[] { "Apple", "Banana", "Pear" }); } private static void DumpResult(string[] someStringArray) { string result = string.Join(", ", someStringArray.Take(someStringArray.Length - 1)) + (someStringArray.Length <= 1 ? "" : " and ") + someStringArray.LastOrDefault(); Console.WriteLine(result); } } } 

如您所见,检查项目数量并确定是否需要添加“和”部分。

一种可能的方案:

 var items = someStringArray; // someStringArray.ToList() if not a ICollection<> var s = string.Join(", ", items.Take(items.Count() - 1)) + (items.Count() > 1 ? " and " : "") + items.LastOrDefault(); 

请注意,如果没有实现ICollection (列表和数组实现它),则此语句可以多次迭代someStringArray 。 如果是这样,请使用您的集合创建一个列表并对其执行查询。

是否有一种简单的方法可以使用Linq实现它而不使用循环?

没有循环是不可能的。 For循环效果最好。 LINQ查询将使用多个循环。

  string Combine (IEnumerable list) { bool start = true; var last = string.Empty; String str = string.Empty; foreach(var item in list) { if ( !start) { str = str + " , " + item; last = item; } else { str = item; start = false; } } if (!string.IsNullOrWhiteSpace(last)) { str = str.Replace( " , " + last, " and " + last); } return str; }