在c#中获取参数多态的错误

时间:2013-06-28 14:37:36

标签: c# parametric-polymorphism

在此功能中:

    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类型,如果T类型为SPFolder,那么我必须在项目上调用.Folder方法。我不能只检测到这一点,所以我不得不使用辅助变量来决定是否需要使用它。

但问题是即使我这样做,我仍然会在尝试将其强制转换为T时出错。

当我调用T方法时,

SPFolder将为.Folder,否则T将为SPListItem类型。

有没有人看到修复此问题?

感谢。

1 个答案:

答案 0 :(得分:1)

由于T理论上可以是任何类型,因此Visual Studio不知道是否有从任何一种类型转换为T的方法。您可以尝试插入(object)演员:

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

只要T是正确的类型,你应该没问题。