2013-05-30 2 views
0

Я хочу знать, почему я получаю сообщение об ошибке, если я напишу ниже заявление, хотя у меня есть упоминание на уровне класса, что является Tтипизированных коллекции с Open Type Параметр

IList<T> targetObjectsCollection = new List<T>(); 
for (int counter = 0; counter < dataTransferObjects.Count; counter++) 
{ 
    targetObjectsCollection.Add(MappSharePointDAOToDTO(sharePointDaos[counter], dataTransferObjects[counter])); 
} 

и когда я изменил его на следующее заявление ошибка ушла ??

IList<IMapperMarker> targetObjectsCollection = new List<IMapperMarker>(); 
for (int counter = 0; counter < dataTransferObjects.Count; counter++) 
{ 
    targetObjectsCollection.Add(MappSharePointDAOToDTO(sharePointDaos[counter], dataTransferObjects[counter])); 
} 

может описать любой орган.

+0

На каком языке это? Похож на C#, но также может быть Java с сомнительными соглашениями об именах ... –

+0

Я бы приблизился к C#, чем Java. В списке нет свойства 'Count'. – Makoto

+0

@Makoto Это верно и соответствует тому, о чем я думал. Я переубеждаюсь. Если это не так, OP может переназначить как Java –

ответ

3

Вы, похоже, не определили T. Это местозаполнитель. Это требует определения.

Этот код может работать, если он использовался в контексте, где T имеет определение. Например,

private IList<T> AddDataTransferObjects(IList<T> dataTransferObjects) 
    : where T : IMapperMarker 
{ 
    IList<T> targetObjectsCollection = new List<T>(); 
    for (int counter = 0; counter < dataTransferObjects.Count; counter++) 
    { 
     targetObjectsCollection.Add(MappSharePointDAOToDTO(sharePointDaos[counter], dataTransferObjects[counter])); 
    } 
    return targetObjectsCollection; 
} 

Если вы назвали, что, как это выглядит следующим образом:

IList<IMapperMarker> dtoList = Something(); 
var list = AddDataTransferObjects(dtoList); 

В этом случае внутренний T будет связан с типом IMapperMarker.

+0

Для вашего примера, я думаю, что 'targetObjectsCollection.Add' все равно будет недоволен, если вы также не добавили к функции ограничение' where T: IMapperMarker'. –

+0

@ScottChamberlain: хороший улов –