首頁 > 後端開發 > C++ > 如何使用反射在 C# 中呼叫帶有動態類型參數的泛型方法?

如何使用反射在 C# 中呼叫帶有動態類型參數的泛型方法?

Barbara Streisand
發布: 2025-01-03 14:19:40
原創
685 人瀏覽過

How to Invoke Generic Methods with Dynamic Type Arguments in C# using Reflection?

使用動態型別參數呼叫泛型方法

在C# 中,使用僅執行時已知的型別參數呼叫泛型方法需要利用反射功能。最初的挑戰涉及循環遍歷特定命名空間中的介面並使用這些介面作為參數呼叫通用方法。

要克服這個問題,請按照以下步驟操作:

  1. 找到泛型方法: 使用 Type.GetMethod 擷取泛型方法資訊。
  2. 建立方法泛型: 使用 MakeGenericMethod 為所需型別建立泛型方法的專用版本。
  3. 呼叫方法: 對產生的方法呼叫 Invoke 來執行它。

例如,考慮以下程式碼:

// Get the generic method
MethodInfo method = typeof(Test).GetMethod("CallMe");

// Get the list of interfaces in the specified namespace
var types = typeof(Test).Assembly
    .GetTypes()
    .Where(t => t.Namespace == "Interfaces");

// Loop through the interfaces
foreach (Type type in types)
{
    // Create a specialized generic method
    MethodInfo genericMethod = method.MakeGenericMethod(type);

    // Invoke the method with no target or arguments
    genericMethod.Invoke(null, null);
}
登入後複製

在此例如,我們檢索「CallMe」泛型方法,為每個介面類型建立專用版本,並反射性地調用它們。

注意:如果您正在處理的介面類型本身就是泛型,請使用 MakeGenericType 而不是 MakeGenericMethod ,傳入適當的型別參數。

以上是如何使用反射在 C# 中呼叫帶有動態類型參數的泛型方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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