首頁 > 後端開發 > C++ > 在運行時,如何使用動態類型參數調用C#中的通用方法?

在運行時,如何使用動態類型參數調用C#中的通用方法?

Susan Sarandon
發布: 2025-02-03 07:52:11
原創
925 人瀏覽過

How Can I Invoke Generic Methods in C# with Dynamic Type Parameters at Runtime?

C#運行時動態類型參數泛型方法的調用

在C#中使用泛型方法時,有時類型參數在編譯時未知,而必須在運行時動態獲取。本文探討在這種情況下調用泛型方法的最佳實踐。

考慮以下代碼示例,其中Example方法嘗試使用從運行時變量myType獲取的類型參數調用泛型方法GenericMethod<T>

public class Sample
{
    public void Example(string typeName)
    {
        Type myType = FindType(typeName);
        GenericMethod<myType>(); // 这行代码无法编译通过
        StaticMethod<myType>(); // 这行代码也无法编译通过
    }

    public void GenericMethod<T>()
    {
        // ...
    }

    public static void StaticMethod<T>()
    {
        // ...
    }
}
登入後複製

如示例所示,直接嘗試調用GenericMethod<myType>是行不通的,因為編譯器無法在編譯時推斷類型參數。為了解決這個問題,我們需要使用反射來獲取方法,然後使用所需的類型參數來“構造”它。

MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.GenericMethod));
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(this, null);
登入後複製

GetMethod方法從當前類型中檢索方法,而MakeGenericMethod使用指定的類型參數構造泛型方法規範。最後,Invoke用於調用構造的泛型方法。

對於靜態方法,將null作為第一個參數傳遞給Invoke。這與泛型方法無關,只是反映了通過反射調用靜態方法的方式。

在C# 4及更高版本中,如果類型推斷是可能的,可以使用動態調用來進一步簡化此過程,但這並非總是如此。通過反射提供的解決方案仍然是使用動態類型參數調用泛型方法的可靠方法。

以上是在運行時,如何使用動態類型參數調用C#中的通用方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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