2016-08-01 6 views
2

Schau, dass ich mich vielleicht dem falschen Weg nähere und die Richtung ist mehr als willkommen.C# Kann nicht von 'System.DateTime' zu 'object []' konvertieren. Methodinfo.invoke

Ich versuche, alle Start Methoden in meiner Lösung auszulösen.

Die Start-Methode nimmt einen Datetime

jedoch, wenn das Datum als Parameter übergeben versuchen, „Invoke“ Ich laufe in den Fehler

kann nicht von System.DateTime Objekt umwandeln []

Irgendwelche Gedanken willkommen

Dank 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

Mögliches Duplikat [C# Reflection Invoke - Objekt vom Typ 'XXX' kann nicht konvertiert werden eingeben 'System.Object \ [\]'] (http: // Stackoverflow. com/questions/21855840/c-sharp-reflection-invoke-Objekt-of-type-xxx-kann nicht in Typ-Sy-konvertiert werden –

Antwort

8

Der zweite Parameter der Methode Invoke erwartet ein Objekt-Array mit Ihren Parametern. Anstatt also ein DateTime von vorbei wickeln Sie es in Objekt arrray:

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

Sie sind als Parameter übergeben einen Datetime, wenn die erwarteten Parameter ein Array von Objekten sind.

Versuchen Sie Folgendes:

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 }); 
     } 

    } 
Verwandte Themen