小编lor*_*can的帖子

在空序列上使用Enumerable.Aggregate(...)方法

我想使用Enumerable.Aggregate(...)方法来连接由分号分隔的字符串列表.相当容易,不是吗?

考虑以下因素:

  • private const string LISTSEPARATOR = "; ";
  • 专辑.OrderedTracksList<TrackDetails>
  • TrackDetailsDiscNumber 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);
Run Code Online (Sandbox Code Playgroud)

我正在使用的解决方法:

    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);
Run Code Online (Sandbox Code Playgroud)

有没有更好的解决方案?是否可以在单个LINQ语句中执行此操作?

提前致谢.

c# linq aggregate sequence

22
推荐指数
4
解决办法
1万
查看次数

标签 统计

aggregate ×1

c# ×1

linq ×1

sequence ×1