2013-09-28 4 views
-1

아래 코드를 기반으로 리플렉션을 사용하여 배열 속성을 인스턴스화하려면 어떻게해야합니까?리플렉션을 사용하여 배열 요소의 형식을 검색하는 중

public class Foo 
{ 
    public Foo() 
    { 
     foreach(var property in GetType().GetProperties()) 
     { 
     if (property.PropertyType.IsArray) 
     { 
      // the line below creates a 2D array of type Bar. How to fix? 
      var array = Array.CreateInstance(property.PropertyType, 0); 
      property.SetValue(this, array, null); 
     } 
     } 
    } 
    public Bar[] Bars {get;set;} 
} 

public class Bar 
{ 
    public string Name {get;set;} 
} 

답변

3

Array.CreateInstance의 최초의 파라미터는 어레이의 요소 유형 기대. property.PropertyType.IsArray을 확인하여 방금 배열 유형 (구체적으로 Bar[] - 즉 Bar 요소의 배열)을 확인하여 전체 속성 유형을 전달합니다.

는 배열 형식의 요소 유형를 얻을 수는 GetElementType 방법을 사용하려면 필요한 때, 당신은 더 높은 번호의 두 번째 인수로 전달 제로를 대체 할 가정

var array = Array.CreateInstance(property.PropertyType.GetElementType(), 0); 

당신 않는 한 실제로 빈 배열 만 필요합니다.

+0

감사의 말. –

관련 문제