在以下代码段中需要帮助:
static void Main(string[] args)
{
var customers = new HashSet<Customer>();
var action = new Action(() =>
{
var innerCustomers = new Customer[]
{
new Customer { CustomerID = 1, CustomerName = "C 1" },
new Customer { CustomerID = 2, CustomerName = "C 2" },
};
innerCustomers.Select(c => customers.Add(c)); //doesn't work
foreach (var customer in innerCustomers)
customers.Add(customer); //works fine
});
action();
}
innerCustomers.Select(c => customers.Add(c));
似乎无法在“customers”集合中插入记录,但是,“foreach”在该行下方工作正常。任何人都知道为什么它不能在linq中工作?我知道我没有从select方法中选择任何东西
答案 0 :(得分:7)
你Select
它,但不对结果做任何事情。由于LINQ的惰性评估(它通过IEnumerable
按需生成结果),它不会被执行。使用foreach
循环,这是最干净的解决方案。
(另一个解决方案是改为使用List<Customer>
并在其上调用ForEach
...但除非您有充分的理由想要使用带回调的方法,否则没有优势。)
修改:实际上,如果你所做的只是向HashSet
添加元素,那么最简洁的解决方案就是UnionWith
:
customers.UnionWith(innerCustomers);
答案 1 :(得分:-1)
不确定您要做什么,但如果您必须使用Select,那么您可以这样做:
innerCustomers.Select(c => { customers.Add(c); return c; });