【问题标题】:Getting error with parametric polymorphism in c#在 C# 中出现参数多态性错误
【发布时间】:2013-06-28 14:37:36
【问题描述】:

在这个函数中:

    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 类型。

有人看到这个问题的解决办法吗?

谢谢。

【问题讨论】:

  • SPFolderSPListItem 有任何共同的类型吗?您需要将T 限制为一些常见类型并将itemList 更改为List&lt;CommonType&gt;

标签: c# parametric-polymorphism


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2010-10-17
    • 2016-03-19
    • 2014-12-03
    相关资源
    最近更新 更多