使用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();
有趣的是assemblyContainsTypeOfCharArray
是 null
。
数组类型在哪里?
最佳答案
简单地说:GetTypes()
返回该程序集中实际声明的类型。数组类型是...不是。他们声称来自那里,但这只是返回元素类型的Assembly
信息。数组类型实际上并没有在其中声明(它实际上没有在任何地方声明 - 它是 JIT 的发明,on-苍蝇)。
基本上:数组类型位于。真丢脸。
关于c# - 数组类型在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17932513/