Heim > Backend-Entwicklung > C++ > Warum gibt mein Reflection-Code beim Aufruf parametrisierter Methoden die Fehlermeldung „Objekt stimmt nicht mit Zieltyp überein' aus?

Warum gibt mein Reflection-Code beim Aufruf parametrisierter Methoden die Fehlermeldung „Objekt stimmt nicht mit Zieltyp überein' aus?

DDD
Freigeben: 2025-01-18 02:46:13
Original
295 Leute haben es durchsucht

Why Reflection Code Throws "object does not match target type"

Verwenden Sie Reflektion, um Methoden mit Parametern aufzurufen

Problembeschreibung:

Ich bin auf die Ausnahme „Objekt stimmt nicht mit Zieltyp überein“ gestoßen, als ich versuchte, eine Methode mit Parametern über Reflektion aufzurufen. Wenn die Methode jedoch ohne Parameter aufgerufen wird, wird sie erfolgreich ausgeführt.

Lösung:

Um dieses Problem zu beheben, stellen Sie sicher, dass Sie beim Aufruf der Methode die richtige Instanz verwenden. Ersetzen Sie in den folgenden Zeilen im „else“-Block „methodInfo“ durch „classInstance“:

<code class="language-csharp">result = methodInfo.Invoke(classInstance, parametersArray);</code>
Nach dem Login kopieren

Detaillierte Erklärung:

Bei der objektorientierten Programmierung ist jede Methode einer Objektinstanz zugeordnet. Beim Aufrufen einer Methode durch Reflektion ist es wichtig, die richtige Instanz zum Ausführen des Aufrufs bereitzustellen. Im bereitgestellten Code ist die Methode „Run“ als Instanzmethode der Klasse „Main“ definiert. Daher muss es für eine Instanz der Klasse aufgerufen werden.

Versuchen Sie zunächst, die Methode mit „methodInfo“ als erstem Parameter der „Invoke“-Methode aufzurufen. Allerdings stellt „methodInfo“ ein MethodInfo-Objekt dar, keine Instanz der „Main“-Klasse. Die Variable „classInstance“ (zuvor erstellt mit „Activator.CreateInstance“) enthält die Instanz, die für den Aufruf verwendet werden soll.

Durch Ändern des Codes zum Aufrufen der Methode mit „classInstance“ als erstem Parameter wird die richtige Instanz bereitgestellt und die Methode kann erfolgreich mit den angegebenen Parametern aufgerufen werden.

Geänderter Code:

<code class="language-csharp">...
if (parameters.Length == 0)
{
    // 这部分工作正常
    result = methodInfo.Invoke(classInstance, null);
}
else
{
    object[] parametersArray = new object[] { "Hello" };

    // 现在调用可以正常工作了
    result = methodInfo.Invoke(classInstance, parametersArray);
}
...</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum gibt mein Reflection-Code beim Aufruf parametrisierter Methoden die Fehlermeldung „Objekt stimmt nicht mit Zieltyp überein' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage