2013-01-04 4 views
1

확인. List<Product>을 가져 와서 일반 List<object>을 사용하는 메서드로 전달하고 리플렉션을 통해 List<dynamic>을 만듭니다. 이 방법은 다른 객체 (예 : Item, Customer, Package 등)의 목록을 처리 할 수 ​​있어야합니다.동적 목록에 강력한 형식의 개체 목록

그러면 JSON을 통해 전선을 통해 전송할 수있는 일반적인 동적 목록을 갖게 될 것입니다.

어떻게해야합니까?

답변

7

가장 간단한 방법은 LINQ를 사용하여 새 목록을 작성하는 것입니다.

List<object> foo = products.ToList<object>(); 

심지어 단지를 : .NET 4를 사용하면 당신이 사용할 수 있도록, 당신이, 당신에게 공분산 사용할 수있어 점을 감안

List<object> foo = new List<object>(products); 

당신은 기존 전달할 수 없습니다 List<Product>이 아니기 때문에을 나열하십시오. a List<object>이 아닙니다.

물론 IEnumerable<object>을 수락하도록 메서드를 변경할 수 있다면 공분산으로 인해 정상적으로 작동합니다. 그게 가능하다면 을 매개 변수 수집에서으로 읽어보십시오.

리플렉션을 사용하여 List<dynamic>을 생성해야하는 이유가 명확하지 않으니까요. 실제로 실제로하는 방법은 무엇입니까? 왜 그냥 사용할 수 없습니다

List<dynamic> foo = new List<dynamic>(products); 
+0

을 그리고 아스 커는 .NET 4.5을 사용하는 경우, 다른 ** 공변 ** 인터페이스있다, ['IReadOnlyList '] (http://msdn.microsoft.com/en -l /usr/hh192385.aspx)'List '과'T []'와 같은 것들이 그것을 구현하고, 공분산 때문에'IReadOnlyList '도'IReadOnlyList '또는'IReadOnlyList ' 컬렉션 (그냥 참조 변환). 이 모든 것은 공분산이 value-types (struct, enum)에서는 작동하지 않기 때문에'Product'가 ** class **라고 가정합니다. –

관련 문제