2012-05-23 2 views
3

그래서 list<> 개체에 list<> 필드를 설정하려고합니다. 이 목록은 어떤 유형일 수도 있으므로 generics를 사용하십시오.일반 목록 바꾸기

'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

를 포기하지 않습니다

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

같은 것을 시도해야한다? –

+0

그 필드에 넣고 싶은 새로운 List <>,이 경우 클래스의 전역. – user1229895

+1

클래스에서 전역 인 경우 올바른 유형이 아닙니다.'T' 유형 매개 변수는이 메소드의 정의와 본문에만 존재하기 때문에'List '유형 일 수 없습니다. –

답변

2

저는 Damien과 함께합니다. SetValue를에 제네릭 형식의 목록을 전달 아무 문제가 없기 때문에 새 목록을 작성하고 다른 컬렉션을 채우는 경우는 Object 유형

public void SetValue(
Object obj, 
Object value 
) 

의 두 개의 인수를 받아들이으로 문제는, newObjectList해야합니다, 그것은 물어볼 것입니다 IEnumerable을 위해, 그래서 당신은 적어도, 컴파일 시간에, 그것은 오류`newObjectList` 무엇

+0

'as'키워드를 잊어 버렸습니다. 그것은 컴파일 문제를 해결했지만 근본적으로 객체가 다른 유형을 위해 작동하기 위해 많은 특별한 경우를 가져야하므로 문제가 있습니다. 하지만 지금 컴파일됩니다. 감사합니다! – user1229895