首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定ParameterInfo是否为泛型类型?

如何确定ParameterInfo是否为泛型类型?
EN

Stack Overflow用户
提问于 2011-01-20 01:56:03
回答 4查看 1.7K关注 0票数 7

我有一个MethodInfo of a GenericMethodDefinition。例如:CallMethod<T>(T arg, string arg2)。GetParameters()方法将提供两个ParameterInfo对象,第一个是泛型对象,第二个不是泛型对象。如何让ParameterInfo告诉我它是通用的?如果它有约束呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-20 01:59:15

检查ParameterType.IsGenericParameter

您可能还想检查ContainsGenericParameters,这对于像MyMethod<T>(List<T> param)这样的东西是正确的。(即使List<>不是泛型参数)

如果IsGenericParameter为真,您还可以调用GetGenericParameterConstraints()来获取接口或基类型约束,并且可以检查GenericParameterAttributes ( [Flags]枚举)中的new()structclass约束。

票数 7
EN

Stack Overflow用户

发布于 2011-01-20 02:00:51

我认为你正在寻找这些:

代码语言:javascript
运行
复制
parameterInfo.ParameterType.ContainsGenericParameters
parameterInfo.ParameterType.GetGenericParameterConstraints()
票数 3
EN

Stack Overflow用户

发布于 2011-01-20 02:21:18

除了其他人对第二个问题的回答之外:是的,我们可以使用GetGenericParameterConstraints()ParameterInfo获得约束,但它并不适用于所有情况。考虑下面这样的泛型方法:

代码语言:javascript
运行
复制
public static void MyMethod<T,V>() where T : Dictionary<int, int>
{
}

这个方法有一个约束,但是这个方法没有参数(想想Enumerable.Cast)。我要说的是,约束不是参数的一部分,而是方法本身。我们可以通过以下方式获得约束:

代码语言:javascript
运行
复制
method.GetGenericArguments()[0].BaseType  //the constraint of T
method.GetGenericArguments()[1].BaseType  //that of V: Object
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4738826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档