鉴于以下代码:如何区分类型:Int32 []和Int32 [*]?
var type1 = typeof(int[]); // Int32[]
var type2 = Array.CreateInstance(elementType: typeof(int),
lengths: new [] {0},
lowerBounds: new []{1}).GetType(); // Int32[*]
鉴于数组类型(A型,其中.IsArray返回true),我怎样才能可靠地那些2种阵列类型之间differenciate?
在不使用任何哈克溶液优选(如实例化的类型或寻找“*”的名称)。
语境:我建立一个串行器与我需要这对每个类型有,像== typeof运算(INT [])将无法工作,所以不断的比较工作。
'type.IsArray!? “Not array”:type.GetArrayRank()> 1? “Multidimensional array”:type == type.GetElementType()。MakeArrayType()? “零基阵”:“不从零开始的数组”' – PetSerAl
一个问题,这样需要多一点点背景下,我绝不会建议使用的类型名称的字符串对比,但答案很明显,你的问题是2型! = typeof(int [])。如果我们对这些类型或变量从(只是一些简单的信息)采购更多的上下文那么我们也许能够给你一些真正有用的答案 –
@PetSerAl这是一个辉煌的答案!非常感谢你尝试一下。 &Chris Schaller我正在构建一个序列化器,并且我需要它来处理每种类型,所以对typeof(int [])进行常量检查将不起作用,我会将其添加到我的问题中。 – hl3mukkel