在运行时确定类型参数的情况下调用泛型方法
许多应用程序处理在运行时之前未知的类型。在这种情况下,使用动态获取的类型参数调用泛型方法变得至关重要。本文探讨实现此任务的最佳实践。
假设以下场景:在 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中文网其他相关文章!