2016-08-01 5 views
2

これは間違った方法と方向に近づいています。C# 'System.DateTime'から 'object []'に変換できません。methodinfo.invoke

すべてのStartメソッドを私のソリューションで起動しようとしています。私はエラーに遭遇し、「起動」のパラメータとして日付を渡そうとしたときに

は、Startメソッドは

ただし日時を要し

のSystem.DateTimeから変換することはできませんと、[]

オブジェクトに

任意の考えは

GWS

感謝を歓迎します

scheduleDate = new DateTime(2010, 03, 11); 

Type[] typelist = GetTypesInNamespace(Assembly.GetExecutingAssembly(), "AssetConsultants"); 

foreach (Type t in typelist) 
{ 
    var methodInfo = t.GetMethod("Start", new Type[] {typeof(DateTime)}); 
    if (methodInfo == null) // the method doesn't exist 
    { 
     // throw some exception 
    } 

    var o = Activator.CreateInstance(t);     
    methodInfo.Invoke(o, scheduleDate); 
} 
+0

可能性のある重複した[C#のリフレクション呼び出し - タイプ 'XXX' のオブジェクトは、 'System.Objectの\ [\]' 型に変換できない](のhttp://のstackoverflowを。 com/questions/21855840/c-sharp-reflection-invoke-object-of-type-xxx-can-be-to-type-sy) –

答えて

8

メソッドInvokeの2番目のパラメータには、パラメータを持つオブジェクト配列が必要です。だからではなく、DateTimeを渡すのオブジェクトarrrayでそれをラップ:

methodInfo.Invoke(o, new object[] { scheduleDate }); 
0

期待されるパラメータは、オブジェクトの配列であるときは、パラメータとしてのDateTimeを渡しています。

次のことを試してみてください。の

private void button_Click(object sender, EventArgs e) 
    { 
     var scheduleDate = new DateTime(2010, 03, 11); 

     var typelist = System.Reflection.Assembly.GetExecutingAssembly().GetTypes() 
        .Where(t => t.Namespace == "AssetConsultants") 
        .ToList(); 


     foreach (Type t in typelist) 
     { 
      var methodInfo = t.GetMethod("Start", new Type[] { typeof(DateTime) }); 
      if (methodInfo == null) // the method doesn't exist 
      { 
       // throw some exception 
      } 

      var o = Activator.CreateInstance(t); 

      methodInfo.Invoke(o, new object[] { scheduleDate }); 
     } 

    } 
関連する問題