2013-05-10 153 views
2

我有一個object類型Array(即object.GetType().IsArray返回true)。我的問題是如何找出它是鋸齒狀還是多維陣列?有沒有辦法序列化數組,使代碼「不知道」的差異(使用反射)?序列化鋸齒和多維陣列

注意,陣列是任意的長度/尺寸。我在想,我也許可以解析Type.Name搜索[,(如在[,,]一部分)或[][]這些區分 - 但是這仍然意味着我必須對每兩個代碼路徑,我覺得應該是解析類型名稱的更好方法。

對於一個鋸齒狀的數組,看起來很容易接受數組,然後使用[]繼續對它進行索引來遍歷所有元素,但是,此方法不適用於多維數組。

+0

您正在編寫自定義序列化機制?爲什麼不使用.NET框架中內置的幾個選項之一? – 2013-05-10 05:33:02

+0

它主要是一個學習的過程:) – nickolayratchev 2013-05-10 05:35:03

+0

試圖尋找到我想通了,我還可以使用的DataContractSerializer – Saravanan 2013-05-10 08:11:14

回答

2

鋸齒陣列是陣列的數組。因此,所有你需要做的就是看的元素類型,並檢查它是一個數組,以及:

static bool IsJaggedArray(object obj) { 
     var t = obj.GetType(); 
     return t.IsArray && t.GetElementType().IsArray; 
    } 

    static void Test() { 
     var a1 = new int[42]; 
     Debug.Assert(!IsJaggedArray(a1)); 
     var a2 = new int[4, 2]; 
     Debug.Assert(!IsJaggedArray(a2)); 
     var a3 = new int[42][]; 
     Debug.Assert(IsJaggedArray(a3)); 
    } 

轉換成數組,並使用等級屬性查找尺寸多維數組的數量。

+0

的自定義選項'Array.Rank'以確定如果數組是多維的(針對'等級> 1'是真的)。這很好,謝謝! – nickolayratchev 2013-05-11 00:23:07