繁体   English   中英

使用构造泛型类型的“ConstructorInfo”,如何从打开类型中获取匹配的“ConstructorInfo”?

[英]With 'ConstructorInfo' from a constructed generic type, how to I get the matching 'ConstructorInfo' from the open type?

在.NET中,我有一个ConstructorInfo的实例。 声明类型是构造的泛型类型(aka foo.DeclaringType.IsConstructedGenericType == true )。 我想检索属于open类型的ConstructorInfo实例 - 即声明类型的泛型类型定义。

使用foo.DeclaringType.GetGenericTypeDefinition()获取open类型本身很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#和公共语言基础结构标准标准ECMA-335 - 公共语言基础结构(CLI)中进一步调查

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM