C# LINQ中的空集

C# LINQ中的空集,c#,linq,set,C#,Linq,Set,代码首先从满足条件的字典中查找一组对。然后,如果集合中有任何元素,则将每对元素转换为html,并聚合结果字符串,如String.Join。。。。但是,如果没有找到对,则返回String.Empty 我的问题是:如何用一种简单、聪明、清晰的方式来做,而不需要写那么多 我想到了这个: public static string ToHtml(List<int> tags) { var found = Values.Where(v => tags.Con

代码首先从满足条件的字典中查找一组对。然后,如果集合中有任何元素,则将每对元素转换为html,并聚合结果字符串,如String.Join。。。。但是,如果没有找到对,则返回String.Empty

我的问题是:如何用一种简单、聪明、清晰的方式来做,而不需要写那么多

我想到了这个:

    public static string ToHtml(List<int> tags)
    {
        var found = Values.Where(v => tags.Contains(v.Key));

        if (found.Any())
            return found.Select(v => v.Value.ToHtml()).Aggregate((v1, v2) => v1 + v2) + " ";
        else
            return String.Empty;
    }
但不幸的是,我现在不能在字符串后面添加空格,以防集合不是空的。如果集合为空,我希望返回String.empty,否则返回String+。

忘记ToHtml方法,可以使用空格分隔符进行聚合,然后删除尾随空格:

    public static string ToHtml(List<int> tags)
    {
        return Values
            .Select(v => tags.Contains(v.Key) ? v.Value.ToHtml() : null)
            .Aggregate((v1, v2) => v1 + v2);
    }

,并对空/非空交叉口进行测试

简单明了并不总是极简主义的同义词。您不应该尝试使用。选择“投影”和“筛选”。过滤是什么。它在哪里。因此,首先选择您需要的项目,然后采取相应的行动

在较新版本的.NET 4.0+中,您只需使用string.Join:


您需要String.JoinString.Join,…+-万一有什么发现。还有绳子。万一什么也找不到就空了。真可爱。看起来很漂亮。谢谢您:
const char space = ' ';
var s = values
            .Select(v => tags.Contains(v.Key) ? v.Value : String.Empty)
            .Aggregate((v1, v2) => v1 + space + v2)
            .TrimEnd(space);
public static string ToHtml(List<int> tags)
{
    var found = Values.Where(v => tags.Contains(v.Key))
                      .Select(v => v.Value.ToHtml());

    return found.Any()
        ? string.Join("", found) + " "
        : string.Empty;
}
public static string ToHtml(List<int> tags)
{
    var found = Values.Where(v => tags.Contains(v.Key))
                      .Select(v => v.Value.ToHtml());

    return found.Any()
        ? string.Join("", found.ToArray()) + " "
        : string.Empty;
}