2013-06-28 3 views
0

В этой функции:Получение ошибки с параметрическим полиморфизмом в 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, поэтому он может быть типа SPFolder или SPListItem на основе моего кода.

деталь в течение цикла уже типа SPListItem, и если T был типа SPFolder то я должен вызвать метод .Folder по данному вопросу. Я не могу просто обнаружить это, поэтому мне пришлось использовать вспомогательную переменную, чтобы решить, нужно ли мне ее использовать.

Но проблема в том, что я делаю это. Я все еще получаю сообщение об ошибке, пытаясь наложить его на тип T.

T будет SPFolder, когда я вызываю метод .Folder и T будет тип SPListItem иначе.

Кто-нибудь видит исправление для этого?

Спасибо.

+0

У 'SPFolder' и' SPListItem' есть какие-либо типы? Вам нужно ограничить 'T' некоторым распространенным типом и изменить' itemList' как 'List '. – Lee

ответ

1

С T теоретически может быть любого типа, Visual Studio не знает, есть ли способ отличить от любого типа до T. Вы можете попробовать вставки (object) бросок:

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

Пока T правильный тип, вы должны быть хорошо.