其中是数组类型

本文关键字:类型 数组 | 更新日期: 2023-09-27 18:25:19

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

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();

有趣的是assemblyContainsTypeOfCharArray就是null

数组类型在哪里?

其中是数组类型

Simply:GetTypes()返回该程序集中实际声明的类型。数组类型为而不是。他们声称来自那里,但这只是返回元素类型的Assembly信息。数组类型实际上并不是在那里声明的(它实际上在任何地方都没有声明的——这是JIT的一项发明)。

所以基本上:数组类型位于。真可耻。