假设我有两个通用方法:
static void Foo<T>(T argument) { }
static void Bar<T>(T argument) { }
下面的代码返回false,因为两个T
属于不同的类型,它们可能有不同的约束:
var flags = BindingFlags.Static | BindingFlags.NonPublic;
var foo = typeof (Program).GetMethod("Foo", flags)bar.GetParameters()[0];
var bar = typeof(Program).GetMethod("Bar", flags)foo.GetParameters()[0];
bool test = foo.ParameterType == bar.ParameterType; // false
我想写一个方法来比较两个 T
基于它们的约束,如果它们有相同的约束则返回 true。例如上面的结果应该是 true因为这两个参数都没有任何约束。
我可以使用 GetGenericParameterConstraints
方法并比较类型,但我还想对 class
、struct
和 new()
约束执行检查。有没有办法使用 Reflection
来做到这一点?
最佳答案
查看GenericParameterAttributes
foo.ParameterType
和 bar.ParameterType
实例的属性:它返回一个枚举,其中包含您的类型的所有可能属性。
你会感兴趣:
ReferenceTypeConstraint
(如果您添加了class
作为约束)NotNullableValueTypeConstraint
(如果您添加了struct
作为约束)DefaultConstructorConstraint
(如果未与NotNullableValueTypeConstraint
结合使用,您添加了new()
作为约束)
关于c# - 如果两个 T 具有相同的约束条件,如何将它们视为相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25608427/