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,因此根据我的代码,它可以是SPFolderSPListItem

for循环中的项已经是SPListItem类型,如果TSPFolder类型,那么我必须对该项调用.Folder方法。我不能直接检测到这一点,所以我必须使用一个辅助变量来决定是否需要使用它

但问题是,即使我这样做了,我在尝试将其转换为类型T时仍然会遇到错误。

当我调用.Folder方法时,T将是SPFolder,否则T将是类型SPListItem

有人看到解决办法了吗?

谢谢。

c#中的参数多态性出现错误

由于T在理论上可以是任何类型,Visual Studio不知道是否有办法从任一类型强制转换为T。您可以尝试插入(object)强制转换:

itemList.Add(isFolder ? (T)(object)item.Folder : (T)(object)item);

只要T是正确的类型,你就应该没事。