在使用泛型方法时,经常会遇到在编译时不知道类型参数,而是在运行时动态确定类型参数的情况。反射提供了一种强大的解决方案来应对这一挑战。
要使用存储在myType变量中的类型调用泛型方法GenericMethod
使用反射获取泛型方法的MethodInfo:
<code class="language-csharp">MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.GenericMethod));</code>
使用MakeGenericMethod提供类型参数来构造泛型方法:
<code class="language-csharp">MethodInfo generic = method.MakeGenericMethod(myType);</code>
调用构造的泛型方法:
<code class="language-csharp">generic.Invoke(this, null);</code>
要调用静态泛型方法StaticMethod
获取静态泛型方法的MethodInfo:
<code class="language-csharp">MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.StaticMethod));</code>
使用类型参数构造泛型方法:
<code class="language-csharp">MethodInfo generic = method.MakeGenericMethod(myType);</code>
调用构造的泛型方法,由于它是静态方法,因此将null作为第一个参数传递:
<code class="language-csharp">generic.Invoke(null, null);</code>
虽然反射为调用泛型方法提供了一个强大的解决方案,但它可能涉及相当多的样板代码。但是,从C# 4开始,您可以利用dynamic关键字来简化此过程。如果类型推断可用,使用dynamic可以显著减少所需的代码量。
以上是如何调用C#中动态分辨类型变量的通用方法?的详细内容。更多信息请关注PHP中文网其他相关文章!