Ich hatte zuvor ein Problem mit der Verwendung von Reflexion, die Sie sehen können here.Reflection zu finden Methode durch Name und returntype
Nachdem ich eine Antwort auf die Frage erhalten und versucht habe, sie in mein Projekt zu implementieren, habe ich eine weitere Wand getroffen.
Im Prinzip habe ich diesen Code:
String[] arr = {"", conStr, ""};
var myType = (typeof(JaberoDC.JaberoDC.JaberoDC));
var method = myType.GetMethods(param, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly).Single(mi => mi.ReturnType == typeof(DataSet));
var subject = Activator.CreateInstance(myType);
var result = method.Invoke(subject, arr);
DataSet ds = (DataSet)result;
Wo param ist ein String.
Es scheint jedoch nicht wie vorgesehen zu funktionieren.
Die Linie
var method = myType.GetMethods (param, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly) .Single(mi => mi.ReturnType == typeof(DataSet));
führt den Fehler
Unkown method GetMethods(string, System.Reflection.BindingFlags) of System.Type
Und
mi => mi.ReturnType == typeof(DataSet));
diesen Fehler Würfe:
Unkown type of variable mi
Könnte mir jemand bei der korrekten Initialisierung meiner Methode Variable helfen. Ich habe mich bei Google umgeschaut, um zu sehen, ob ich möglicherweise etwas finden kann, das mich zumindest in die richtige Richtung weist. Mein vorheriger Code (wieder, siehe other question) kompiliert und lief, aber warf einen mehrdeutigen Treffer gefunden Fehler.
EDIT:
meinen Code geändert mehr wie die Antwort unten zu sein. Aber ich erhalte eine Fehlermeldung bei Debuggen es:
targetparametercountexception parameter count mismatch
, die auf dieser Linie passiert:
var result = method.Invoke(subject, arr);
Aus der Lektüre über Reflexion Online scheint es, wie Sie in einer Reihe von Parametern übergeben werden sollen, dass Die Methode, die Sie aufrufen, benötigt (in meinem Fall das Array). In einer anderen Klasse verwende ich diese (was absolut in Ordnung funktioniert, ich bin versucht, die genau die gleiche Methode aufzurufen):
DataSet ds = jdc.FETCHvw_WorksiteEntry("", conStr, "");
Ende EDIT1.
wo kommt 'param' kommt in Ihrem Code? Es ist nirgendwo in Ihrem Beispiel angezeigt –
Können Sie die Methode, die Sie versuchen, durch Reflexion aufrufen? – user3185569
Ich kann keine Überladung von Type.GetMethods finden, die zwei Argumente empfängt. https: // msdn. microsoft.com/en-us/library/4d848zkb(v=vs.110).aspx – m1o2