c# - 检查对象是否满足通用参数约束

标签 c# generics reflection

我有一个类似于下面的界面:

public interface IInterface<T>
    where T : IInterface<T>
{
}

现在我需要使用反射创建一个表示此接口(interface)的类型,例如

typeof(IInterface<>).MakeGenericType(someType);

但是,直到运行时我才真正知道“someType”是什么类型,并且该类型作为通用接口(interface)的类型参数可能无效,因此 MakeGenericType 失败。

问题是,我如何检查“someType”对于通用约束是否有效?

最佳答案

老实说,最简单的方法就是调用MakeGenericType 并捕获ArgumentException,如果任何类型参数是错误(或者如果您的类型参数数量错误)。

虽然您可以使用Type.GetGenericParameterConstraints找到约束,然后弄清楚每个约束的含义,这将是难看且容易出错的代码。

通常不喜欢建议“尝试一下然后捕获”,但在这种情况下,我认为这将是最可靠的方法。否则,您只是重新实现了 CLR 无论如何都会执行的检查——您完美地重新实现它们的机会有多大? :)

关于c# - 检查对象是否满足通用参数约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4864496/

相关文章:

c# - GitSharp 能否在给定叶的哈希值的情况下直接返回叶(blob)对象?

java - 不存在类型变量 U 的实例,因此 Row 符合 Iterable<?延伸 U>

c# - 如何创建具有多个方法调用的 ExpressionTree

c# - 如何将此语句转换为XAML?

c# - Automapper:数组到对象的映射

c# - agsXMPP OnMessage 不包含消息正文

java - 通用 : extends Number & Comparable Basic understanding

java - 为 java 1.6 实现泛型

go - 递归结构反射错误 : panic: reflect: Field of non-struct type

java - 将 Object[] 转换为另一种类型