在 .NET 中,我有一个 ConstructorInfo
实例。声明类型是构造泛型类型(也称为 foo.DeclaringType.IsConstructedGenericType == true
)。我想检索属于开放类型的 ConstructorInfo
实例 - 即声明类型的泛型类型定义。
使用foo.DeclaringType.GetGenericTypeDefinition()
获取开放类型本身很简单;然而,目前还没有明显的方法来获得匹配的构造函数。我可以重新枚举两边的所有构造函数,但是,我仍然面临着将这两个列表匹配在一起的问题;而且我不确定 .NET 是否提供任何保证以相同顺序枚举构造函数。
有没有人有办法获得原始的 ConstructorInfo
副本?
最佳答案
我认为您可以使用 MetadataToken
属性匹配构造函数:
var closed = foo.GetType().GetConstructors().Select(c => c.MetadataToken);
var open = foo.GetType().GetGenericTypeDefinition().GetConstructors().Select(o => o.MetadataToken);
var b = Enumerable.SequenceEqual(closed, open); //returns true
构造函数的封闭版本和开放版本似乎具有相同的元数据标记,因此这将是连接两个列表的一种方式。即使泛型类和封闭类型是在不同的程序集中定义的,这也是成立的。
我还没有找到任何证据证明这是记录在案的行为,但您应该能够在 ECMA C# and Common Language Infrastructure Standards 中进一步调查或 Standard ECMA-335 - Common Language Infrastructure (CLI)
关于c# - 使用构造的泛型类型中的 'ConstructorInfo',如何从开放类型中获取匹配的 'ConstructorInfo'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43850948/