2016-09-19 12 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) 
関連する問題