繁体   English   中英

在C#中使用参数多态性获取错误

[英]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 ,因此根据我的代码,该列表的类型可以为SPFolderSPListItem

for循环中的项目已为SPListItem类型,如果TSPFolder类型,则必须在该项目上调用.Folder方法。 我不能仅仅检测到它,所以我不得不使用一个辅助变量来决定是否需要使用它。

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

TSPFolder当我打电话的.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM