首頁 > 後端開發 > C++ > 為什麼在呼叫參數化方法時我的反射程式碼會拋出「物件與目標類型不符」?

為什麼在呼叫參數化方法時我的反射程式碼會拋出「物件與目標類型不符」?

DDD
發布: 2025-01-18 02:46:13
原創
295 人瀏覽過

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

使用反射呼叫帶參數的方法

問題描述:

嘗試透過反射呼叫帶參數的方法時,遇到異常「物件與目標類型不符」。但是,如果呼叫不帶參數的方法,則可以成功執行。

解:

要解決此問題,請確保在呼叫方法時使用了正確的實例。在“else”區塊中的以下行中,將“methodInfo”替換為“classInstance”:

<code class="language-csharp">result = methodInfo.Invoke(classInstance, parametersArray);</code>
登入後複製

詳細解釋:

在物件導向程式設計中,每個方法都與一個物件實例關聯。透過反射呼叫方法時,務必提供正確的實例以執行呼叫。在提供的程式碼中,“Run”方法定義為“Main”類別的實例方法。因此,必須在該類別的實例上呼叫它。

最初,嘗試使用「methodInfo」作為「Invoke」方法的第一個參數來呼叫該方法。但是,「methodInfo」表示MethodInfo對象,而不是「Main」類別的實例。 「classInstance」變數(先前使用「Activator.CreateInstance」建立)保存了應該用於呼叫的實例。

透過修改程式碼以使用「classInstance」作為第一個參數呼叫方法,提供了正確的實例,並且該方法可以成功地使用指定的參數呼叫。

修改後的程式碼:

<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>
登入後複製

以上是為什麼在呼叫參數化方法時我的反射程式碼會拋出「物件與目標類型不符」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板