数组类型在哪里?

时间:2013-07-29 19:24:36

标签: c# clr .net-assembly jit

如果我们想要创建特定类型的数组类型,例如MakeArrayType()数组,那么使用char不是问题:

typeof(char).MakeArrayType()

当然,使用typeof(char[])更直观。

类型的属性Assembly告诉我们类型所在的程序集。

因此,以下代码应该是在程序集中查找类型的合理示例:

var chars=new[] { '\x20' };
var typeofCharArray=chars.GetType();
var assembly=typeofCharArray.Assembly;
var doesContain=assembly.GetTypes().Contains(typeofCharArray);

但是doesContain说它没有,它是false。无论数组类型来自MakeArrayType()还是typeof(),还是实例的GetType,都会发生这种情况。

有人怀疑它是转发给我从Assembly.GetTypes读过的其他集合。我试过了:

var assemblyContainsTypeOfCharArray=(
        from it in AppDomain.CurrentDomain.GetAssemblies()
        let types=it.GetTypes()
        where types.Contains(typeof(char[]))
        select it).FirstOrDefault();

有趣的是assemblyContainsTypeOfCharArraynull

数组类型在哪里?

1 个答案:

答案 0 :(得分:4)

简单地说:GetTypes()返回在该程序集中实际声明的类型。数组类型是...... 不是。他们声明来自那里,但这只是返回元素类型的Assembly信息。那里的数组类型实际 声明(它实际上并不是声明 - 它是JIT的一项发明,在 - 即时)。

基本上:数组类型位于。很遗憾。