我有这段代码:
HashSet<string> MyHash = new HashSet<String>();
foreach (MyType a in myCollection)
{
foreach (string b in a.mylist)
{
MyHash.Add(b);
}
}
我试图让它更容易阅读,但它不起作用:
myCollection.MyType.select(x => x.mylist.select(y => MyHash.add(y)));
有什么建议吗?
答案 0 :(得分:4)
Select
将返回项目集合,而不是修改项目。因此,您必须将其返回值分配给变量或成员,或将其传递给方法。此外,您需要展平结果以将内部列表的成员添加到哈希集中。
因此,当您想要将结果添加到列表中时,请使用HashSet.UnionWith
:
myHash.UnionWith(myCollection.SelectMany(x => x.MyList));
另外,你也可以使用接受一组项目的HashSet
构造函数:
var myHash = new HashSet<string>(...);
然而,恕我直言,这比使用一些基于foreach的方法更具可读性。
答案 1 :(得分:0)
以下是我将如何做,分离查询定义和状态修改。
fill
如果你想出于某种原因对其进行单行处理:
IEnumerable<string> items = myCollection.SelectMany(a => a.myList);
foreach(string b in items)
{
MyHash.Add(b);
}