首页 >后端开发 >C++ >如何调用C#中动态分辨类型变量的通用方法?

如何调用C#中动态分辨类型变量的通用方法?

Linda Hamilton
Linda Hamilton原创
2025-02-03 08:15:10860浏览

How Can I Invoke Generic Methods with Dynamically Resolved Type Variables in C#?

使用动态解析的类型变量调用C#泛型方法

在使用泛型方法时,经常会遇到在编译时不知道类型参数,而是在运行时动态确定类型参数的情况。反射提供了一种强大的解决方案来应对这一挑战。

泛型方法GenericMethod的解决方案

要使用存储在myType变量中的类型调用泛型方法GenericMethod,可以使用以下方法:

  1. 使用反射获取泛型方法的MethodInfo:

    <code class="language-csharp">MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.GenericMethod));</code>
  2. 使用MakeGenericMethod提供类型参数来构造泛型方法:

    <code class="language-csharp">MethodInfo generic = method.MakeGenericMethod(myType);</code>
  3. 调用构造的泛型方法:

    <code class="language-csharp">generic.Invoke(this, null);</code>

静态方法StaticMethod的解决方案

要调用静态泛型方法StaticMethod,请按照类似的步骤操作:

  1. 获取静态泛型方法的MethodInfo:

    <code class="language-csharp">MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.StaticMethod));</code>
  2. 使用类型参数构造泛型方法:

    <code class="language-csharp">MethodInfo generic = method.MakeGenericMethod(myType);</code>
  3. 调用构造的泛型方法,由于它是静态方法,因此将null作为第一个参数传递:

    <code class="language-csharp">generic.Invoke(null, null);</code>

C# 4和dynamic关键字带来的简化

虽然反射为调用泛型方法提供了一个强大的解决方案,但它可能涉及相当多的样板代码。但是,从C# 4开始,您可以利用dynamic关键字来简化此过程。如果类型推断可用,使用dynamic可以显著减少所需的代码量。

以上是如何调用C#中动态分辨类型变量的通用方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn