首页 >后端开发 >C++ >如何在 C# 泛型方法中动态指定泛型类型参数?

如何在 C# 泛型方法中动态指定泛型类型参数?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-17 20:27:10653浏览

How Can I Dynamically Specify Generic Type Arguments in C# Generic Methods?

C#泛型方法:灵活运用可变类型参数

在C#中使用泛型方法,例如DoesEntityExist<T>(其中T代表符合IGloballyIdentifiable接口的类型),如果尝试使用变量类型动态指定泛型类型参数(例如Type t = entity.GetType();),可能会遇到编译时错误。这是因为C#泛型要求类型信息在编译时已知。

利用反射机制

为了克服这个限制,可以使用反射机制。此技术涉及到在与泛型方法关联的MethodInfo对象上调用GetMethod和MakeGenericMethod方法。这允许您动态提供类型参数,即使它只在运行时已知。

<code class="language-csharp">MethodInfo method = GetType().GetMethod("DoesEntityExist")
                             .MakeGenericMethod(new Type[] { t });
method.Invoke(this, new object[] { entityGuid, transaction });</code>

提升方法泛型性

另一种方法是修改调用方法本身使其成为泛型方法,从而允许您将所需的类型参数作为参数传递。这将类型选择的决定提升到更高的层次,简化后续方法调用。

补充说明

为了提供更具体的指导,最好提供更多关于问题的上下文信息。有时,使用反射可能是必要的,但策略性地规划泛型类型的使用可以最大限度地减少对它的重复使用。通过仔细选择反射的时机,您可以确保类型参数只动态指定一次,允许下游代码无缝地使用它们。

以上是如何在 C# 泛型方法中动态指定泛型类型参数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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