c#中的参数多态性出现错误
本文关键字:错误 多态性 参数 | 更新日期: 2023-09-27 18:20:13
在此函数中:
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
。
有人看到解决办法了吗?
谢谢。
由于T
在理论上可以是任何类型,Visual Studio不知道是否有办法从任一类型强制转换为T
。您可以尝试插入(object)
强制转换:
itemList.Add(isFolder ? (T)(object)item.Folder : (T)(object)item);
只要T
是正确的类型,你就应该没事。