在某些情况下,可能需要根据运行时确定的类型动态创建泛型类型的实例。这可能具有挑战性,因为泛型类型通常在编译时定义。
一种实现此目标的方法是利用反射。以下是一种变通方法,允许您使用包含目标类型的变量创建泛型类型实例:
<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中文网其他相关文章!