2012-07-31 64 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