2016-09-19 100 views
1

我想生成一些通用代碼,可以從另一個系統生成的文本中創建C#對象。該對象用於方法調用 - 方法調用也將通過反射完成。當我創建此方法參數對象時,我無法弄清楚如何實例化並將值分配給數組類型的屬性。我可以在下面的代碼示例中使用setValue分配給「name」,但是如何將值分配給數組?使用反射設置對象數組類型的屬性值

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) 
相關問題