[英]Getting error with parametric polymorphism in c#
在此功能中:
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
否则。
有人看到此修复程序吗?
谢谢。
由于从理论上讲T
可以是任何类型,因此Visual Studio不知道是否存在从这两种类型转换为T
。 您可以尝试插入(object)
演员表:
itemList.Add(isFolder ? (T)(object)item.Folder : (T)(object)item);
只要T
是正确的类型,就可以了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.