Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Linq vs foreach循环中调用HashSet.Add(项)_C#_Linq - Fatal编程技术网

C# 在Linq vs foreach循环中调用HashSet.Add(项)

C# 在Linq vs foreach循环中调用HashSet.Add(项),c#,linq,C#,Linq,需要以下代码段的帮助: static void Main(string[] args) { var customers = new HashSet<Customer>(); var action = new Action(() => { var innerCustomers = new Customer[] { new Customer { CustomerID = 1, CustomerNam

需要以下代码段的帮助:

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();
}
static void Main(字符串[]args)
{
var customers=newhashset();
变量操作=新操作(()=>
{
var innerCustomers=新客户[]
{ 
新客户{CustomerID=1,CustomerName=“C 1”},
新客户{CustomerID=2,CustomerName=“C2”},
};
innerCustomers.Select(c=>customers.Add(c));//不起作用
foreach(innerCustomers中的var客户)
customers.Add(customer);//工作正常
});
动作();
}

innercusters.Select(c=>customers.Add(c))
在“customers”集合中插入记录方面似乎不起作用,但是在该行下面的“foreach”可以正常工作。有人知道为什么它在林克不起作用吗?我知道我没有从select方法中选择任何东西,但是不要对结果做任何事情。由于LINQ的延迟计算(它通过一个
IEnumerable
)按需生成结果),它无法执行。使用
foreach
循环,这是最干净的解决方案

(另一种解决方案是使用
列表
,并在此基础上调用
ForEach
。。但是,除非您有很好的理由希望使用带有回调的方法,否则没有任何优势。)

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


不确定要执行的操作,但如果必须使用Select,则可以执行以下操作:

innerCustomers.Select(c => { customers.Add(c); return c; });

谢谢,我完全忘记了延迟加载:);我一调用.ToList(),它就开始加载集合。@MoizDhanji:一般来说,LINQ应该没有副作用。在调用
ToList
@minitech时,通常会出现一个列表:“UnionWith”是我刚才使用的。我在浏览器上看到你提出了同样的建议:)@Austin:“ToList”只是暂时用来看看它是否有效。感谢您提供的信息。正如minitech提到的,由于延迟加载,它不会工作。Linq不是一个修改工具,而是一个查询工具。
innerCustomers.Select(c => { customers.Add(c); return c; });