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いる可能性があります。SPFolderSPListItem

for ループ内の項目は既に typeSPListItemであり、型の場合Tは、項目のメソッドSPFolderを呼び出す必要があります。.Folderこれを検出することはできないため、ヘルパー変数を使用して使用する必要があるかどうかを判断する必要がありました。

しかし、問題は、これを行っても type にキャストしようとするとエラーが発生することTです。

TメソッドSPFolderを呼び出すときになり、それ以外の場合は型になります。.FolderTSPListItem

誰かがこれの修正を見ていますか?

ありがとう。

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 に答える