鑑於以下代碼:如何區分類型: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