3

在以下代码段中需要帮助:

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));在“客户”集合中插入记录方面似乎没有工作,但是,该行下方的“foreach”工作正常。有人知道为什么它不能在 linq 中工作吗?我知道我没有从 select 方法中选择任何东西

4

2 回答 2

9

Select它,但不要对结果做任何事情。由于 LINQ 的惰性求值(它通过 按需生成结果IEnumerable),它不会被执行。使用foreach循环,这是最干净的解决方案。

(另一种解决方案是改用 aList<Customer>并调用ForEach它......但除非你有充分的理由想要使用带有回调的方法,否则没有优势。)

编辑:实际上,如果您所做的只是向 中添加元素HashSet,那么最干净的解决方案是UnionWith

customers.UnionWith(innerCustomers);
于 2012-07-24T21:26:24.763 回答
-1

不确定您要做什么,但是如果您必须使用 Select,那么您可以这样做:

innerCustomers.Select(c => { customers.Add(c); return c; });
于 2012-07-24T21:27:31.877 回答