在Linq vs foreach循环中调用HashSet.Add(item)

Moi*_*oiz 1 c# linq

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

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();
}
Run Code Online (Sandbox Code Playgroud)

innerCustomers.Select(c => customers.Add(c));似乎没有在"客户"集合中插入记录的工作,但是,在该行下方的"foreach"工作正常.任何人都知道为什么它不能在linq中工作?我知道我没有从select方法中选择任何东西

Ry-*_*Ry- 7

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

(另一个解决方案是使用a List<Customer>而不是调用ForEach...但除非你有一个非常好的理由想要使用带回调的方法,否则没有优势.)

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

customers.UnionWith(innerCustomers);
Run Code Online (Sandbox Code Playgroud)