我一直在考虑这个问题,感觉必须有一个我想要的简单解决方案。
我们说我有以下课程:
public class Foo<T>
{
public Foo(T value)
{
}
public Foo(int value)
{
}
}
如果我在类型Foo<System.Int32>
上获得所有构造函数,我将返回两个构造函数,这两个构造函数都有一个类型为System.Int32
的参数,无法区分。
如果我从Foo<System.Int32>
(Foo<T>
)的泛型类型定义中获取所有构造函数,我将返回两个构造函数。一个接受通用参数T
,另一个接受System.Int32
// Will return two constructors with signatures that look identical.
var type = typeof(Foo<int>);
var ctors1 = type.GetConstructors();
// Will return two constructors as well. Parameters can be differentiated.
var genericTypeDefinition = typeof(Foo<int>).GetGenericTypeDefinition();
var ctors2 = genericTypeDefinition.GetConstructors();
有没有办法将构造函数与其泛型类型定义中的对应项匹配?
答案 0 :(得分:2)
在两种情况下比较ctors
,您可以比较他们的MetadataToken。
例如:
foreach (var item in ctors1)
{
var ctorMatch = ctors2.SingleOrDefault(c => c.MetadataToken == item.MetadataToken);
}