2012-07-31 61 views
0

我需要在int[]數組中存儲不同數量的值,具體取決於從我的CheckboxList控件(cblSections)中選擇了多少個項目。在int []對象中存儲不同數量的值

目前我將這些值存儲在ArrayList中,然後確定此對象的長度,並根據此對象設置我的int[]對象的大小。

有沒有更好的方式來做到這一點,這涉及到更少的代碼(和更少的對象!)?

ArrayList alSectionId = new ArrayList(); 
foreach (ListItem item in cblSections.Items) { 
    if (item.Selected) { 
     alSectionId.Add(item.Value); 
    } 
} 

int[] sectionId = new int[(alSectionId.Count - 1) + 1]; 

if (alSectionId.Count > 0) { 
    int i = 0; 
    foreach (int sId in alSectionId) { 
     sectionId[i] = sId; 
     i += 1; 
    } 
} 
+2

任何理由你最終需要一個'int []'而不是'列表'?任何你使用'ArrayList'而不是'List '的原因? – 2012-07-31 10:06:18

+0

@JonSkeet'int []'是模型中使用的數據類型,但是如果'List '是一個更好的選擇,這個可以改變?我實際上是在VB.NET中編寫這段代碼,所以之後將任何東西都轉換回來,但我更願意學習C#的方式。 – Curt 2012-07-31 10:08:16

+0

你只能使用ArrayList對象來計算int數組的大小嗎? – SMK 2012-07-31 10:08:19

回答

1

您應該使用List對象,而不是。然後,一旦你已經填充這個你可以使用ToArray()功能直接隱蔽它的int[]

List<int> items = new List<int>(); 
items.ToArray(); 

注:雖然ArrayList類做似乎也有一個ToArray()功能,它是更好地使用List反正..爲什麼?我不知道,這是我聽過很多次的事情之一,我只是認爲它理所當然,並忘記了原因:/

+5

「因爲ArrayList不是類型安全的」? :) – 2012-07-31 10:15:21

+0

@JonSkeet:是的,我會接受,謝謝;) – musefan 2012-07-31 10:17:01

6

你可以使用:

int numSelected = cblSections.Items.Count(x => x.Selected); 

您也將能夠立即產生你的數組:

int[] sectionId = cblSections.Items 
    .Where(x => x.Selected) 
    .Select(x => x.Value) 
    .ToArray(); 
+0

+1乾杯大衛,這是一個更加整潔的方法,但我將使用'List '方法,因爲這似乎是一個更好的數據類型,用於我試圖實現的目標 – Curt 2012-07-31 10:14:43

+0

@ curt:sweet,那麼就使用ToList而不是ToArray。 (當然更新變量定義) – 2012-07-31 10:21:10