在此功能中:
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
时出错。
T
方法时, SPFolder
将为.Folder
,否则T
将为SPListItem
类型。
有没有人看到修复此问题?
感谢。
答案 0 :(得分:1)
由于T
理论上可以是任何类型,因此Visual Studio不知道是否有从任何一种类型转换为T
的方法。您可以尝试插入(object)
演员:
itemList.Add(isFolder ? (T)(object)item.Folder : (T)(object)item);
只要T
是正确的类型,你应该没问题。