【问题标题】:ArrayList to int[] in c#C# 中的 ArrayList 到 int[]
【发布时间】:2026-01-16 23:45:02
【问题描述】:

我的声明如下

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);
}

毕竟我想分配这个EmpIDs,它被声明为int array

我试过了

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

但我无法添加任何人可以帮助我

【问题讨论】:

  • 如果你在.net-2.0,使用List<>

标签: c# asp.net .net-2.0


【解决方案1】:

您应该避免使用ArrayList。而是使用List&lt;int&gt;,它有一个方法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&lt;int&gt;

    【讨论】:

    • 非常有用的答案 - 在 .Net Micro Framework 中没有泛型,因此必须使用 ArrayList
    【解决方案3】:

    代替(旧)ArrayList 类,使用(现代)List&lt;int&gt;。它是类型安全的,并且有 ToArray method:

    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&lt;int&gt;,而不是之后再创建int[]

    【讨论】:

      【解决方案4】:

      如果你真的需要ArrayList,可以试试下面的:

      EmpIDs = arrEmpID.OfType<int>().ToArray();
      

      (但这仅适用于 .NET 3.5 及更高版本)

      【讨论】:

      • OfType 是一种 LINQ 扩展方法。我不认为它在 .net 2.0 中可用。
      【解决方案5】:

      试试这个:

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

      【讨论】:

        【解决方案6】:

        试试这个。

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

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

        【讨论】:

        • 这不是真的。如果要为其分配另一个数组,则不必初始化该数组。你只需要声明它。
        • @Frederik Gheysels,我指的是这段代码..int[] EmpIDs = new int[] { }; 您建议的技术不需要初始化数组,但我的需要..
        • 这是一段特别奇怪的代码——你为什么要重复覆盖同一个变量?这似乎不太可能满足 OP 的要求。
        • oops.. 已经从问题中复制了代码。不过现在已经修改了。