Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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语句lambdas中处理资源_C#_Linq_Lambda_Idisposable - Fatal编程技术网

C# 在Linq语句lambdas中处理资源

C# 在Linq语句lambdas中处理资源,c#,linq,lambda,idisposable,C#,Linq,Lambda,Idisposable,我有一些代码: using(var userlookup = new UserLookup()) { someThing = someCollection .Select(t => { var user = userLookup.UserLookup(t.UserId); return new Wrapper

我有一些代码:

using(var userlookup = new UserLookup()) { someThing = someCollection .Select(t => { var user = userLookup.UserLookup(t.UserId); return new Wrapper { UserString = string.Format("{0} {1} ({2})", user.FirstName, user.LastName, t.UserId), SomeOtherProperty = t.SomeFunction() etc.. }; }); } 使用(var userlookup=newuserlookup()) { 某物=某物集合 .选择(t=> { var user=userLookup.userLookup(t.UserId); 返回新包装器 { UserString=string.Format(“{0}{1}({2})”, user.FirstName、user.LastName、t.UserId), SomeOtherProperty=t.SomeFunction() 等 }; }); } 当访问
某物时,我会得到一个
ObjectDisposedException
。这可以通过删除using块来解决。如果我这样做:

  • 当Linq可枚举文件被释放时,
    UserLookup
    会被释放吗
  • 如果是这样,这是怎么发生的
  • 当处理可枚举项时,是否有任何方法可以重新构造此代码以处理
    UserLookup
    实例,同时仍保留延迟执行 (我确信我可以在using块内调用ToList(),它会工作得很好,我可能会这样做,但只是出于好奇)

    我还应该提到,
    someThing
    是MVC视图模型的一个属性

    在处理可枚举项时,是否有任何方法可以重新构造此代码以处理UserLookup实例,同时仍保持延迟执行

    您需要将
    UserLookup
    实例传递给生成此序列的方法,并在处理完结果后处理它

    (我确信我可以在using块内调用ToList(),它会工作得很好,我可能会这样做,但只是出于好奇)

    是的,这将导致在处置
    UserLookup
    之前完全执行可枚举项,从而避免该问题

    在处理可枚举项时,是否有任何方法可以重新构造此代码以处理UserLookup实例,同时仍保持延迟执行

    您需要将
    UserLookup
    实例传递给生成此序列的方法,并在处理完结果后处理它

    (我确信我可以在using块内调用ToList(),它会工作得很好,我可能会这样做,但只是出于好奇)


    是的,这将导致在处置
    UserLookup
    之前完全执行可枚举项,并避免该问题。

    因此,为了保持定义的执行,我必须有效地将foreach包装在using块中,并将属性转换为以UserLookup为参数的方法。有道理。谢谢因此,为了保持deferred执行,我必须有效地将foreach包装在using块中,并将属性转换为以UserLookup作为参数的方法。有道理。谢谢