在運行時確定類型參數的情況下調用泛型方法
許多應用程序處理在運行時之前未知的類型。在這種情況下,使用動態獲取的類型參數調用泛型方法變得至關重要。本文探討實現此任務的最佳實踐。
假設以下場景:在 Example()
方法中,我們需要使用存儲在 myType
變量中的 Type
調用泛型方法 GenericMethod<T>()
。直接調用 GenericMethod<myType>()
的方法不可行。
為了使用動態類型參數調用泛型方法,我們使用反射。首先,我們使用 GetMethod()
獲取方法元數據。然後,我們通過提供適當的類型參數,使用 MakeGenericMethod()
構造泛型方法。最後,我們使用 Invoke()
調用泛型方法。
<code class="language-csharp">MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.GenericMethod)); MethodInfo generic = method.MakeGenericMethod(myType); generic.Invoke(this, null);</code>
如果泛型方法是靜態的,我們將 null
作為第一個參數傳遞給 Invoke
。此步驟與泛型方法無關,是通用的反射實踐。
C# 4 引入了“dynamic”類型推斷,簡化了特定場景中的此過程。但是,當類型推斷不可用時,了解反射仍然很有用。
以上是如何使用C#中的動態類型參數調用通用方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!