3

给定一个类型的对象,System.Reflection.MethodInfo我如何提取通用参数约束?不知何故,我找不到有关此的合理信息。

4

2 回答 2

4

您需要做的就是获取泛型方法定义,并在其上列出泛型参数:

method
.GetGenericMethodDefinition()
.GetGenericArguments()
.Select(i => i.GetGenericParameterConstraints())
.Dump();

但是,请注意,这并不是 100% 对应于 C# 的泛型类型约束 - 有一点回旋余地。不过,如果您只关心例如基本类型的约束,它会正常工作:)

例如,class有趣的是,实际上根本不是类型约束,而struct被“翻译”为System.ValueType(不太令人惊讶)。new()也不是类型约束,因此此方法无法找到它。

如果您还需要考虑这些约束,请使用GenericParameterAttributes. Select例如,struct约束会给你NotNullableValueTypeConstraint | DefaultConstructorConstraint.

于 2015-11-18T09:08:22.480 回答
0

您可能正在寻找Type.GetGenericParameterConstraints Method ()

返回表示当前泛型类型参数约束的 Type 对象数组。

还有Type.GetGenericArguments 方法 ()

返回表示封闭泛型类型的类型参数或泛型类型定义的类型参数的 Type 对象数组

于 2015-11-18T09:01:40.693 回答