在使用 GetItems 方法并将返回集合中的每个项目传递给另一个方法时,我们遇到了一个奇怪的问题。
我们在 Tridion 2011 GA 上。
以下代码正在破坏:
private void foo(StructureGroup structureGroup, Session session, int counterTemp, int levels)
{
OrganizationalItemItemsFilter filtersg= new OrganizationalItemItemsFilter(session);
filtersg.Recursive = false;
IEnumerable<ItemType> itemtype = new List<ItemType> { ItemType.StructureGroup};
filtersg.ItemTypes = itemtype;
foreach (StructureGroup sg in structureGroup.GetItems(filtersg))
{
GetSiteMap(sg, counterTemp, levels);
}
}
private void GetSiteMap(StructureGroup sg, int counter, int levels)
{
logger.Info(sg.Id); //ok
logger.Info(sg.Title); //ok
logger.Info(sg.Directory); // null !?
}
但是,如果在将 sg 传递给下一个方法之前访问 sg.Directory,则一切正常:
private void foo(StructureGroup structureGroup, Session session, int counterTemp, int levels)
OrganizationalItemItemsFilter filtersg= new OrganizationalItemItemsFilter(session);
filtersg.Recursive = false;
IEnumerable<ItemType> itemtype = new List<ItemType> { ItemType.StructureGroup};
filtersg.ItemTypes = itemtype;
foreach (StructureGroup sg in structureGroup.GetItems(filtersg))
{
logger.Info(sg.Directory); //if printed here, all works fine down the line.
GetSiteMap(sg, counterTemp, levels);
}
}
private void GetSiteMap(StructureGroup sg, int counter, int levels)
{
logger.Info(sg.Id); //ok
logger.Info(sg.Title); //ok
logger.Info(sg.Directory); // ok }
}
感觉 GetItems() 方法发生了一些事情,它没有返回完整的对象,并且一旦将部分加载的对象传递给 next 方法,它就无法加载属性,就好像丢失了原始引用一样.
有人可以解释一下这里发生了什么吗?另外,在方法之间传递 TOM.NET 对象是不是很糟糕?
谢谢