我想使用 * Esclent.Aggregate(...)* 方法来连接一个由字符串分隔的字符串列表。相当简单,不是吗?
考虑到以下情况:
private const string LISTSEPARATOR = "; ";
- *album.*OrderedTracks is
List<TrackDetails>
- TrackDetails 具有 DiscNumber Int16?属性
如果 Distinct() 返回的序列为空(因为 Aggregate() 方法不适用于空序列),则以下语句将抛出异常:
txtDiscNumber.Text = album.OrderedTracks
.Where(a => a.DiscNumber.HasValue)
.Select(a => a.DiscNumber.Value.ToString())
.Distinct()
.Aggregate((i, j) => i + LISTSEPARATOR + j);
字符串
我正在使用的工作区:
List<string> DiscNumbers =
album.OrderedTracks
.Where(a => a.DiscNumber.HasValue)
.Select(a => a.DiscNumber.Value.ToString())
.Distinct()
.ToList();
if (!DiscNumbers.Any())
txtDiscNumber.Text = null;
else
txtDiscNumber.Text =
DiscNumbers.Aggregate((i, j) => i + LISTSEPARATOR + j);
型
有没有更好的解决方案?有没有可能在一个LINQ语句中做到这一点?
先谢了。
5条答案
按热度按时间lsmd5eda1#
要连接字符串列表,请使用
string.Join
方法。Aggregate
函数不能处理空集合。它需要一个二进制累加函数,并且需要集合中的一个项作为种子值传递给二进制函数。但是,有一个overload of
Aggregate
:字符串
此重载允许您指定种子值。如果指定了种子值,则在集合为空时也将使用该值作为结果。
**编辑:**如果你真的想使用
Aggregate
,你可以这样做:型
使用
StringBuilder
:型
brqmpdu12#
我想你可能会发现下面的辅助扩展方法很有用。
字符串
它允许您以以下方式表达查询。
型
这仍然是“从上到下”,这极大地提高了可读性。
izkcnapc3#
您可以使用
字符串
对于初始值,它适用于空集合,但对于长度检查,
34gzjxbg4#
使用
String.Join
如下:字符串
dgtucam15#
为了调试的目的,我经常使用这样的方法,我想出了两个扩展方法:
字符串
像这样使用:
型