在以下代码段中需要帮助:
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方法中选择任何东西
你Select呢,但不要对结果做任何事情.由于LINQ的惰性评估(它通过a按需生成结果IEnumerable),它不会被执行.使用foreach循环,这是最干净的解决方案.
(另一个解决方案是使用a List<Customer>而不是调用ForEach...但除非你有一个非常好的理由想要使用带回调的方法,否则没有优势.)
编辑:实际上,如果你所做的只是添加元素HashSet,那么最干净的解决方案是UnionWith:
customers.UnionWith(innerCustomers);
Run Code Online (Sandbox Code Playgroud)