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中文網其他相關文章!