gpt4 book ai didi

sharepoint - 使用从函数返回的 SPListItemCollection 是否会重新打开 SPWeb?

转载 作者:行者123 更新时间:2023-12-03 16:55:47 26 4
gpt4 key购买 nike

阅读后Stefan Gossner's post关于处置对象和这个关于 Cross method dispose patterns 的问题,我发现我不小心重新打开了一些SPWeb。我知道在 Stefan Gossner 的帖子中,他提到您应该在处理完任何子对象后处理 SPWeb。然而,microsoft documentation提到缓存 SPListItemCollection 对象。下面的代码正确吗?返回的 SPListItemCollection 会重新打开 SPWeb 对象吗?有什么办法可以确定吗?

// is this correct????
private SPListItemCollection GetListItems()
{
SPListItemCollection items = null;
try
{
using (SPSite site = new SPSite(GetListSiteUrl()))
{
using (SPWeb web = site.OpenWeb())
{
// retrieve the list
SPList list = web.Lists[_ListName];

// more code to create the query...
items = list.GetItems(query);
}
}
}
catch (Exception e)
{
// log error
}
return items;
}

编辑 09/09/09

我主要指的是 Stefan Grossner's post的这部分:

You should dispose a SPWeb or SPSite object after the last access to a child object of this object.



我相信他的意思是,如果我在处理掉我用来获取它的 SPWeb 之后使用 SPListItemCollection ...... SPWeb 将自动重新打开。

最佳答案

我是在 asking Stefan directly 之后发现的SPListItemCollection 确实可以在处理后重新打开 SPWeb。这意味着我上面发布的代码是错误的,我只能在使用 SPListItemCollection 后处理 SPWeb。

更新:最好将 SPListItemCollection 转换为其他内容并返回。

private DataTable GetListItems()
{
DataTable table = null;
try
{
SPListItemCollection items = null;
using (SPSite site = new SPSite(GetListSiteUrl()))
{
using (SPWeb web = site.OpenWeb())
{
// retrieve the list
SPList list = web.Lists[_ListName];

// more code to create the query...
items = list.GetItems(query);

// convert to a regular DataTable
table = items.GetDataTable();
}
}
}
catch (Exception e)
{
// log error
}
return table;
}

关于sharepoint - 使用从函数返回的 SPListItemCollection 是否会重新打开 SPWeb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1394952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com