![](/img/trans.png)
[英]List<string> to comma separated string and last value without comma
[英]Comma separated list with “and” in place of the last comma
我想在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<string>
(列表和數組實現它),則可以多次迭代someStringArray
。 如果是這樣,請使用您的集合創建一個列表並對其執行查詢。
是否有一種簡單的方法可以使用Linq實現它而不使用循環?
沒有循環是不可能的。 For循環效果最好。 LINQ查詢將使用多個循環。
string Combine (IEnumerable<string> 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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.