2012-05-23 3 views
3

, поэтому я пытаюсь установить поле list<> внутри объекта с новым list<>. этот список может быть любого типа, следовательно, использование дженериков.Замена общего списка

Я получаю ошибку времени компиляции, 'не может преобразовать System.Collections.Generic.List<object> выражение типа System.Collections.Generic.IEnumerable<T>' Есть ли все равно, чтобы сделать эту работу?

private void MyGenericMethod<T>(FieldInfo field) 
{ 
    field.SetValue(obj, new List<T>(newObjectList)); // new List<T> allObjects.ConvertAll<IEnumerable>) ??? 
} 
+2

Что такое 'newObjectList'? –

+0

его новый Список <>, который я хочу поместить в поле, в этом случае его глобальное в классе. – user1229895

+1

Если он глобальный в классе, то он не имеет правильного типа - он не может быть типа 'List ', так как параметр типа 'T' существует только внутри определения и тела этого метода. –

ответ

2

Я с Дэмиеном. Проблема должна быть newObjectList, потому что нет никаких проблем прохождения списка общего типа для SetValue, так как она принимает два аргумента типа Object

public void SetValue(
Object obj, 
Object value 
) 

При создании нового списка и заполнить его с другой коллекцией, он будет просить для IEnumerable, так что вы должны попробовать что-то вроде

field.SetValue(obj, new List<T>(newObjectList as IEnumerable<T>)); 

по крайней мере, во время компиляции, он не будет бросать какие-либо ошибки

+0

Я забыл о ключевом слове «как». Он решил проблему с компиляцией, но я думаю, что в принципе у нее есть проблемы, так как объекту нужно будет иметь множество особых случаев для работы для других типов. Но теперь он компилируется, спасибо! – user1229895