2016-09-19 2 views
1

다른 시스템에서 생성 된 텍스트에서 C# 개체를 만들 수있는 일반 코드를 생성하려고합니다. 객체는 메소드 호출에 사용됩니다. 메소드 호출은 리플렉션에 의해 수행 될 것입니다. 이 메서드 매개 변수 개체를 만들 때 배열 형식의 속성에 값을 인스턴스화하고 할당하는 방법을 알 수 없습니다. 아래의 코드 샘플에서 "name"에 할당하려면 setValue를 사용할 수 있지만 배열에 값을 할당하는 방법은 무엇입니까?리플렉션을 사용하여 개체 배열 형식 속성 값 설정

class Car { 
    public string name { get; set; } 
    public Door[] doors { get; set; } 
} 

class Door { 
    public int index { get; set; } 
    public bool isDusty { get; set; } 
} 

public object createMethodParameter(Vehicle<T> v) 

    object methodParameter; 

    Type type = v.GetType(); 

    PropertyInfo[] properties; 
    MethodInfo[] mi = type.GetMethods(); 

    ParameterInfo[] pi; 

    foreach (var method in mi) 
    { 
     if ("create".Equals(method.Name.ToLowerInvariant())) // look for the create method 
     { 
      pi = method.GetParameters(); 
      foreach (var param in pi) 
      { 
       returnValue = Activator.CreateInstance(param.ParameterType); 
       properties = param.ParameterType.GetProperties(); 
       foreach (PropertyInfo property in properties) 
       { 
        if (property.PropertyType.IsArray) 
        { 
         // how to create the doors array on the car?? 
        } 
        else 
        { 
         property.SetValue(methodParameter, "Porsche", null); 
        } 
       } 
      } 
     } 
    } 
    return methodParameter; 
} 
+1

글쎄, 당신은 전화, 배열의 유형을 얻을 필요가'Array.CreateInstance' 또는 이와 유사한, 당신이 붙어있는 부분 등을 배열 속성을 설정을 채우기? –

+0

"Array.CreateInstance"부분입니다. 나는 Activator 클래스가 필요하다고 생각했다. SLaks 대답이 나를 도왔다. 몇 분 후에 받아 들일 것입니다. –

답변

2
Array.CreateInstance(property.PropertyType.GetElementType(), 4) 
관련 문제