C# LINQ中的空集
代码首先从满足条件的字典中查找一组对。然后,如果集合中有任何元素,则将每对元素转换为html,并聚合结果字符串,如String.Join。。。。但是,如果没有找到对,则返回String.Empty 我的问题是:如何用一种简单、聪明、清晰的方式来做,而不需要写那么多 我想到了这个: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
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;
}