【发布时间】:2013-06-28 14:37:36
【问题描述】:
在这个函数中:
public List<T> getX<T>(SPListItemCollection itemCollection, List<T> itemList, Report RO, WebpartSettings WPS, bool isFolder)
{
foreach (SPListItem item in itemCollection)
{
if (have_permissions_for_item(WPS.EDIT_MODE, item, RO))
{
itemList.Add(isFolder ? (T)item.Folder : (T)item);
}
}
return itemList;
}
它使用参数多态性,我得到一个itemcollection 并浏览它并将其添加到列表中,如果它是正确的权限,然后返回列表。
返回的列表是T 类型,因此根据我的代码,它可以是SPFolder 或SPListItem 类型。
for 循环中的项目已经是 SPListItem 类型,如果 T 是 SPFolder 类型,那么我必须在项目上调用 .Folder 方法。我不能只检测到这一点,所以我必须使用辅助变量来决定是否需要使用它。
但问题是,即使我这样做了,尝试将其强制转换为 T 时仍然会出错。
当我调用.Folder 方法时T 将是SPFolder,否则T 将是SPListItem 类型。
有人看到这个问题的解决办法吗?
谢谢。
【问题讨论】:
-
SPFolder和SPListItem有任何共同的类型吗?您需要将T限制为一些常见类型并将itemList更改为List<CommonType>。
标签: c# parametric-polymorphism