📜  C#|如何将ArrayList转换为Array

📅  最后修改于: 2021-05-29 19:48:09             🧑  作者: Mango

在C#中,数组是一组用通用名称引用的相似类型的变量。每个数据项都称为数组的元素。元素的数据类型可以是任何有效的数据类型,例如char,int,float等,并且元素存储在连续的位置。

ArrayList表示可以单独索引的对象的有序集合。基本上,它是数组的替代方法。它允许动态分配内存,添加,搜索和排序列表中的项目。

下面是将ArrayList转换为Array的两种方法:

方法1:将ArrayList转换为对象数组

句法:

public virtual object[] ToArray ();

解释:

  • 它将ArrayList的元素复制到新的Object数组。
  • 它返回一个Object数组,其中包含ArrayList元素的副本。

示例:在下面的程序中, mylist是ArrayList,我们在其中添加了7个项目,它们是工作日的名称。然后,我们将创建一个对象数组obj1,并使用带有mylist的ToArray方法,将Arraylist元素分配给该对象数组。最后,使用foreach循环可以打印所需的转换数组。

// C# program to illustrate ToArray() Method
using System;
using System.Collections;
  
class GFG {
  
    // Main Method
    public static void Main()
    {
  
        // Create and initalizing ArrayList
        ArrayList mylist = new ArrayList(7);
  
        mylist.Add("Monday");
        mylist.Add("Tuesday");
        mylist.Add("Wednesday");
        mylist.Add("Thursday");
        mylist.Add("Friday");
        mylist.Add("Saturday");
        mylist.Add("Sunday");
  
        // Copy the data of Arraylist into
        // the object Array Using ToArray()
        // method
        object[] obj1 = mylist.ToArray();
  
        foreach(string st in obj1)
        {
            Console.WriteLine(st);
        }
    }
}
输出:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

方法2:将ArrayList转换为指定类型的数组

句法:

public virtual Array ToArray (Type t);

在此,t是要创建和复制元素的目标数组的元素类型。

解释:

  • 它将ArrayList的元素复制到指定元素类型的新数组。
  • 它返回指定元素类型的数组,其中包含ArrayList元素的副本。
  • 如果t的值为null,则抛出ArgumentNullException
  • 如果无法将源ArrayList的类型强制转换为指定的类型,则抛出InvalidCastException

范例1:

// C# program to illustrate the use 
// of ToArray(Type) Method in the 
// conversion of ArrayList to Array
using System;
using System.Collections;
  
class GFG {
  
    // Main Method
    public static void Main()
    {
  
        // Create and initalize new array
        ArrayList mylist = new ArrayList(5);
  
        mylist.Add("Ruby");
        mylist.Add("C#");
        mylist.Add("C++");
        mylist.Add("Java");
        mylist.Add("Perl");
  
        // Copy the data of Arraylist into
        // the string Array Using
        // ToArray(Type) method
        string[] str = (string[])mylist.ToArray(typeof(string));
  
        // Display the data of str string
        foreach(string j in str)
        {
            Console.WriteLine(j);
        }
    }
}
输出:
Ruby
C#
C++
Java
Perl

代码说明:在这里,我们将ArrayList转换为指定类型(即字符串类型)的Array。为了进行转换,您必须将ToArray(Type)方法与typeof关键字一起使用。然后,您必须将其显式转换为指定的类型。在这里,您可以看到代码行字符串[] str =(字符串[])mylist.ToArray(typeof(字符串));(字符串[])用于mylist将其转换为字符串数组类型。这行代码还有另一种选择,如下面的示例所示。

范例2:

// C# program to illustrate the use 
// of ToArray(Type) Method in the 
// conversion of ArrayList to Array
using System;
using System.Collections;
  
class GFG {
  
    // Main Method
    public static void Main()
    {
  
        // Create and initalize new array
        ArrayList mylist = new ArrayList(5);
  
        mylist.Add("Ruby");
        mylist.Add("C#");
        mylist.Add("C++");
        mylist.Add("Java");
        mylist.Add("Perl");
  
        // Copy the data of Arraylist into
        // the string Array Using
        // ToArray(Type) method
        // see this clearly as here we 
        // are using as keyword
        string[] str = mylist.ToArray(typeof(string)) as string[];
  
        // Display the data of str string
        foreach(string j in str)
        {
            Console.WriteLine(j);
        }
    }
}
输出:
Ruby
C#
C++
Java
Perl

如果ArrayList不包含相同类型的所有元素会发生什么?

如果ArrayList不包含相同类型的元素,则您的转换(从ArrayList到Array)将抛出InvalidCastException

例子:

// C# program to illustrate the use 
// of ToArray(Type) Method in the 
// conversion of ArrayList to Array
using System;
using System.Collections;
   
class GFG {
   
    // Main Method
    public static void Main()
    {
   
        // Create and initalize new array
        ArrayList mylist = new ArrayList(5);
   
        mylist.Add("Ruby");
        mylist.Add(5);
        mylist.Add("C++");
        mylist.Add(7);
        mylist.Add("Perl");
   
        // It will throw the InvalidCastException
        // Copy the data of Arraylist into
        // the string Array Using
        // ToArray(Type) method
        string[] str = mylist.ToArray(typeof(string)) as string[];
   
        // Display the data of str string
        foreach(string j in str)
        {
            Console.WriteLine(j);
        }
    }
}

运行时错误: