1

我有一些代码:

使用(var userlookup = new UserLookup())
{
    someThing = someCollection
                     .选择(t =>
                     {
                        var user = userLookup.UserLookup(t.UserId);
                        返回新包装器
                        {
                           UserString = string.Format("{0} {1} ({2})",
                                          user.FirstName, user.LastName, t.UserId),
                           SomeOtherProperty = t.SomeFunction()
                           ETC..
                        };
                     });
}

someThing被访问时,我得到一个ObjectDisposedException. 这可以通过删除 using 块来解决。如果我这样做:

  1. UserLookup当 Linq 可枚举被释放时会被释放吗?
  2. 如果是这样,这是怎么发生的?
  3. 有没有办法重新构造此代码以在处置UserLookup可枚举时处置实例同时仍保持延迟执行?

(我确定我可以在 using 块中调用 ToList() 并且它会正常工作,我可能会这样做,但只是出于好奇)

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

4

1 回答 1

1

有没有办法重新构造此代码以在释放可枚举时释放 UserLookup 实例,同时仍保持延迟执行?

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

(我确定我可以在 using 块中调用 ToList() 并且它会正常工作,我可能会这样做,但只是出于好奇)

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

于 2013-05-02T23:31:33.433 回答