在C#中将ArrayList转换为int[]

5
我有如下声明。
int[] EmpIDs = new int[] { };
ArrayList arrEmpID = new ArrayList();
int EmpID = 0;
if (CheckBox1.Checked)
{
   EmpID = 123;
   arrEmpID.Add(EmpID);
}
if (CheckBox2.Checked)
{
   EmpID = 1234;
   arrEmpID.Add(EmpID);
}
if (CheckBox3.Checked)
{
   EmpID = 1234;
   arrEmpID.Add(EmpID);
}

最后,我想将已声明为int arrayEmpIDs分配给它。

我尝试了这个。

for (int i = 0; i < arrEmpID.Count; i++)
    {
        EmpIDs = arrEmpID.ToArray(new int[i]);
    }

但我无法添加,有人可以帮忙吗?

3
如果您使用的是.NET 2.0,可以使用List<> - VMAtm
6个回答

11

你应该避免使用ArrayList。相反,使用List<int>,它有一个ToArray()方法。

List<int> list = new List<int>();
list.Add(123);
list.Add(456);
int[] myArray = list.ToArray();

2

将ArrayList转换为数组时,您需要指定它包含的对象类型,并确保将结果强制转换为所需类型的数组:

int[] empIds;

empIds = (int[])arrEmpID.ToArray(typeof(int));

但是,正如其他人指出的那样,你为什么要使用一个 ArrayList ?如果你使用的是 .NET 1.1,确实没有其他选择,只能使用 ArrayList。 然而,如果你使用的是 .NET 2.0 或更高版本,你应该使用一个 List<int>


非常有用的答案 - 在 .Net 微框架中没有泛型,因此必须使用 ArrayList - dumbledad

1

不要再使用 (老旧的) ArrayList 类,而是使用 (现代的) List<int>。它是类型安全的,并且具有 ToArray 方法

List<int> arrEmpID = new List<int>(); 
if (CheckBox1.Checked) 
    arrEmpID.Add(1234); 
if (CheckBox2.Checked) 
    arrEmpID.Add(1234); 
if (CheckBox3.Checked) 
    arrEmpID.Add(1234); 

int[] EmpIDs = arrEmpID.ToArray();

实际上,您可能会考虑一直使用 List<int> 而不是之后创建一个 int[]

1
如果你真的需要使用 ArrayList,你可以尝试使用以下代码:
EmpIDs = arrEmpID.OfType<int>().ToArray();

(但这仅适用于.NET 3.5及以上版本)

OfType 是一个 LINQ 扩展方法。我认为它在 .net 2.0 中不可用。 - Heinzi

0

试一下这个。

EmpIDs= new int[arrEmpID.Count]; // initilise the array 
for (int i = 0; i < arrEmpID.Count; i++)
    {
        EmpIDs[i] = arrEmpID[i]; // set each value
    }

你的代码问题在于没有将数组初始化为ArrayList的大小。

1
这并不是真的。如果你要给一个数组分配另一个数组,你就不需要初始化它,只需要声明即可。 - Frederik Gheysels
@Frederik Gheysels,我指的是这段代码.. int[] EmpIDs = new int[] { }; 你建议的技术不需要对数组进行初始化,但我的代码需要。 - Anantha Sharma
这是一段非常奇怪的代码 - 为什么你想要反复覆盖同一个变量?这似乎非常不可能实现OP想要的功能。 - Jon Skeet
糟糕..我从问题中复制了代码..不过现在已经修改了。 - Anantha Sharma

0

试试这个:

EmpIDs = arrEmpID.ToArray(typeof(int));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接