2015-06-18 72 views
0

我有一塊類,我定義每個塊的形狀。如何將一個列表轉換爲int [] []

myShape.Add(new piece 
     { 
      Height = 3, 
      Width = 2, 
      Name = "3x2 L TopRight", 
      Size = 4, 
      Shape = new int[][] { 
         new int[] { 1, 0 }, 
         new int[] { 1, 0 }, 
         new int[] { 1, 1 } 
        } 
     }); 

但是我手工製作的形狀,現在我在讀實時片,所以我創造這樣

List<int[]> virtualRow = new List<int[]>(); 
virtualRow.Add(new int[] { 1, 0 }); 
virtualRow.Add(new int[] { 1, 0 }); 
virtualRow.Add(new int[] { 1, 1 }); 

那麼,怎樣才能用virtualRow創建形狀?

我嘗試像

Shape = new int[][] { virtualRow.ToArray() } 

但說

無法隱式轉換類型 '詮釋[] []' 到 'INT []'

+3

只是好奇,爲什麼你第一次注意使用二維數組。爲什麼不能'清單< List>'爲你工作? – ryanyuyu

+0

@ryanyuyu這只是一箇中間步驟,最終結果將使用一個只有偏移量的變換一維數組來優化速度。例如,在TopLeft角落中的3x3網格中,變爲{0,3,6,7},但我會考慮您的建議 –

回答

8

virtualRow.ToArray()已經值爲int的數組的數組。您不需要創建一個新的數組,並將其添加到它。

所有你需要的是:

Shape = virtualRow.ToArray(), 
3

virtualRow是整數數組的List,因此要獲得整數數組的數組簡單地寫:

Shape = virtualRow.ToArray(); 

...返回根據需要,T型號爲List.ToArray()

你的代碼是錯誤的,因爲它試圖添加int[][]Shape,而不是創建Shape作爲int[][]

1

你要做到以下幾點:

Shape = virtualRow.ToArray(); 

由於virtualRow已經是陣列的列表。 ToArray函數會爲您的virtualRow創建一個int[][]對象,並且您需要做的就是將其存儲爲整形。你想要做的是創建一個矩陣,其中是ToArray函數的結果。這樣,你只是存儲功能的結果,它給你你想要的。