首页 > 后端开发 > C++ > 在运行时,如何使用动态类型参数调用C#中的通用方法?

在运行时,如何使用动态类型参数调用C#中的通用方法?

Susan Sarandon
发布: 2025-02-03 07:52:11
原创
925 人浏览过

How Can I Invoke Generic Methods in C# with Dynamic Type Parameters at Runtime?

C#运行时动态类型参数泛型方法的调用

在C#中使用泛型方法时,有时类型参数在编译时未知,而必须在运行时动态获取。本文探讨在这种情况下调用泛型方法的最佳实践。

考虑以下代码示例,其中Example方法尝试使用从运行时变量myType获取的类型参数调用泛型方法GenericMethod<T>

public class Sample
{
    public void Example(string typeName)
    {
        Type myType = FindType(typeName);
        GenericMethod<myType>(); // 这行代码无法编译通过
        StaticMethod<myType>(); // 这行代码也无法编译通过
    }

    public void GenericMethod<T>()
    {
        // ...
    }

    public static void StaticMethod<T>()
    {
        // ...
    }
}
登录后复制

如示例所示,直接尝试调用GenericMethod<myType>是行不通的,因为编译器无法在编译时推断类型参数。为了解决这个问题,我们需要使用反射来获取方法,然后使用所需的类型参数来“构造”它。

MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.GenericMethod));
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(this, null);
登录后复制

GetMethod方法从当前类型中检索方法,而MakeGenericMethod使用指定的类型参数构造泛型方法规范。最后,Invoke用于调用构造的泛型方法。

对于静态方法,将null作为第一个参数传递给Invoke。这与泛型方法无关,只是反映了通过反射调用静态方法的方式。

在C# 4及更高版本中,如果类型推断是可能的,可以使用动态调用来进一步简化此过程,但这并非总是如此。通过反射提供的解决方案仍然是使用动态类型参数调用泛型方法的可靠方法。

以上是在运行时,如何使用动态类型参数调用C#中的通用方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板