0

在这个函数中:

    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并浏览它,如果它是正确的权限,则将其添加到列表中,然后返回列表。返回的列表是 type T,所以它可以是 typeSPFolder或者SPListItem基于我的代码。

for 循环中的项目已经是 type SPListItem,如果T是 type ,SPFolder那么我必须调用该.Folder项目的方法。我不能只检测到这一点,所以我不得不使用辅助变量来决定是否需要使用它。

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

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

有没有人看到解决这个问题?

谢谢。

4

1 回答 1

1

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

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

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

于 2013-06-28T14:45:32.313 回答