将使用 SPList 从已处置的对象派生的对象 .OpenWeb() 导致错误?

SPList list = null;

using (SPWeb web = SPContext.Current.Site.OpenWeb("/myweb")){
    list = web.Lists["Awesome Name"];
}

SPListItemCollection items = list.Items;
有帮助吗?

解决方案

不,不会有错误。我通常使用这种设计模式来保持我的 using 块小。

SPList list;

using (SPWeb web = SPContext.Current.Site.OpenWeb("myweb"))
{
    list = web.GetList("/myweb/Lists/Awesome Name");
}

SPListItemCollection items = list.Items;

如果您正在更新 SPListItem 以需要的方式 SPWeb.AllowUnsafeUpdates = true; 不过,你需要保持对 SPWeb (即:做所有的工作 using 块。)

有关何时需要设置 AllowUnsafeUpdates 财产,见赫里斯托巴甫洛夫的 你需要知道的关于AllowUnsafeUpdates.这是我找到的最好的解释。

我经常这样做,所以我的代码中没有那么多嵌套块。它使它更干净。一旦你检索一个列表,它就存储在内存中。如果您只在您的 using 块。如果在加载列表的时间和请求值的时间(例如从项目)之间更改了某些内容,则获得的值是首先加载列表时存在的值。

这也是为什么如果你只得到几个列表,你应该使用 SPWeb.GetList() 而不是 SPWeb.Lists[index]. SPWeb.Lists 在第一次调用时加载web中的所有列表。 GetList() 每次都进行数据库调用,但如果web中有很多列表,则加载到内存中的次数要少得多。这是一个权衡。

许可以下: CC-BY-SA归因
scroll top