c# - 如何通过 C# 中的反射提取泛型方法约束?

标签 c# generics reflection generic-constraints

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

最佳答案

您需要做的就是获取通用方法定义,并列出通用参数:

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

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

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

如果您还需要考虑这些约束,请使用 Select 中的 GenericParameterAttributes 属性。例如,struct 约束将为您提供 NotNullableValueTypeConstraint | DefaultConstructorConstraint.

关于c# - 如何通过 C# 中的反射提取泛型方法约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33775528/

相关文章:

c# - 动态模拟远程用户 - c# 和 asp.net

c# - 我怎样才能写一个通用的匿名方法?

c# - linq查询在字符串列表中分组

Javascript 根据函数名调用函数

java - JPA - 检索所有实体类

c# - 将sql脚本转换成可以在sqlite上运行的格式

c# - 在 Entity Framework 中锁定数据库行

C# 集合数据结构 1 :1 Key/Value Mapping

c# - 带有泛型的类型化类

c# - 确定从泛型类型派生的类型