在某些情況下,可能需要根據執行時間確定的類型動態建立泛型類型的實例。這可能具有挑戰性,因為泛型類型通常在編譯時定義。
一種實現此目標的方法是利用反射。以下是一種變通方法,可讓您使用包含目標類型的變數建立泛型類型實例:
<code class="language-csharp">Type k = typeof(double); Type genericListType = typeof(List<>); // 注意这里<> var specificListType = genericListType.MakeGenericType(k); var list = Activator.CreateInstance(specificListType);</code>
MakeGenericType
方法接受單一 Type
參數,並傳回一個新的 Type
對象,該物件表示具有指定類型參數的泛型類型。在本例中,我們傳入 double
的 Type
來指定目標類型。
取得具體的泛型類型後,我們可以使用 Activator.CreateInstance
方法實例化該類型的物件。此方法使用反射機制動態建立指定物件類型的新實例。
透過此方法,您可以根據執行時間確定的類型動態建立泛型類型實例,從而實現更大的靈活性和程式碼適應性。 請注意,typeof(List)
需要改為 typeof(List<>)
才能正確表示泛型類型List<T>
。
以上是如何在運行時動態建立泛型類型實例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!