gpt4 book ai didi

c# - 使用构造的泛型类型中的 'ConstructorInfo',如何从开放类型中获取匹配的 'ConstructorInfo'?

转载 作者:行者123 更新时间:2023-11-30 15:58:08 25 4
gpt4 key购买 nike

在 .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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com