【发布时间】:2013-07-29 19:24:35
【问题描述】:
如果我们要制作特定类型的数组类型,使用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();
有趣的是assemblyContainsTypeOfCharArray 是null。
数组类型在哪里?
【问题讨论】:
标签: c# clr .net-assembly jit