c# - 数组类型在哪里?

标签 c# clr .net-assembly jit

使用MakeArrayType()没有问题如果我们想要创建一个特定类型的数组类型,例如char数组:

typeof(char).MakeArrayType()

当然用typeof(char[])更直观反而。

还有属性(property)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

数组类型在哪里?

最佳答案

简单地说:GetTypes() 返回该程序集中实际声明的类型。数组类型是...不是。他们声称来自那里,但这只是返回元素类型的Assembly信息。数组类型实际上并没有在其中声明(它实际上没有在任何地方声明 - 它是 JIT 的发明,on-苍蝇)。

基本上:数组类型位于。真丢脸。

关于c# - 数组类型在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17932513/

相关文章:

c# - SQL CLR : Streaming table valued function results

c# - 如何在Windows phone 8 中通过Assembly.Load 动态加载程序集?

c# - 如何在ElasticSearch NEST 7.x中为具有文档ID的文档列表编制索引

c# - UnityWebRequest WebGL 缺少 Cookie 响应 header

debugging - 我如何知道故障转储的 CLR 版本?

c# - 程序集文件重命名和 Assembly.LoadFile

c# - 无法加载文件或程序集 System.Web.WebPages.Deployment

c# - 为什么在调用 IEnumerable.Contains() 时需要转换动态对象?

c# - 中间件和 Scoped/Singleton 对象

c# - 添加新的 CLR 用户定义函数时获取 "Cannot find the type nvarchar(MAX)"