System.Array 类

方法描述

提供创建、操作、搜索和排序数组的方法,因而在公共语言运行时中用作所有数组的基类。

语法定义(C# System.Array 类 的用法)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Array : ICloneable, 
	IList, ICollection, IEnumerable, IStructuralComparable, IStructuralEquatable

构造函数

构造函数名称 构造函数描述

成员/方法

方法名称 方法描述
AsReadOnly 返回指定数组的只读包装。
BinarySearch(Array, Object) 使用由 Array 中每个元素和指定的对象实现的 IComparable 接口,在整个一维排序 Array 中搜索特定元素。
BinarySearch(Array, Object, IComparer) 使用指定的 IComparer 接口,在整个一维排序 Array 中搜索值。
BinarySearch(Array, Int32, Int32, Object) 使用由 Array 中每个元素和指定值实现的 IComparable 接口,在一维排序 Array 的某个范围中搜索值。
BinarySearch(Array, Int32, Int32, Object, IComparer) 使用指定的 IComparer 接口,在一维排序 Array 的某个元素范围中搜索值。
BinarySearch(T[], T) 使用由 Array 中每个元素和指定的对象实现的 IComparable 泛型接口,在整个一维排序 Array 中搜索特定元素。
BinarySearch(T[], T, IComparer) 使用指定的 IComparer 泛型接口,在整个一维排序 Array 中搜索值。
BinarySearch(T[], Int32, Int32, T) 使用由 Array 中每个元素和指定值实现的 IComparable 泛型接口,在一维排序 Array 的某个元素范围中搜索值。
BinarySearch(T[], Int32, Int32, T, IComparer) 使用指定的 IComparer 泛型接口,在一维排序 Array 的某个元素范围中搜索值。
Clear 将 Array 中的一系列元素设置为零、false 或 null,具体取决于元素类型。
Clone 创建 Array 的浅表副本。
ConstrainedCopy 从指定的源索引开始,复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从指定的目标索引开始)。 保证在复制未成功完成的情况下撤消所有更改。
ConvertAll 将一种类型的数组转换为另一种类型的数组。
Copy(Array, Array, Int32) 从第一个元素开始复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从第一个元素开始)。 长度指定为 32 位整数。
Copy(Array, Array, Int64) 从第一个元素开始复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从第一个元素开始)。 长度指定为 64 位整数。
Copy(Array, Int32, Array, Int32, Int32) 从指定的源索引开始,复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从指定的目标索引开始)。 长度和索引指定为 32 位整数。
Copy(Array, Int64, Array, Int64, Int64) 从指定的源索引开始,复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从指定的目标索引开始)。 长度和索引指定为 64 位整数。
CopyTo(Array, Int32) 将当前一维 Array 的所有元素复制到指定的一维 Array 中(从指定的目标 Array 索引开始)。 索引指定为 32 位整数。
CopyTo(Array, Int64) 将当前一维 Array 的所有元素复制到指定的一维 Array 中(从指定的目标 Array 索引开始)。 索引指定为 64 位整数。
CreateInstance(Type, Int32) 创建使用从零开始的索引、具有指定 Type 和长度的一维 Array。
CreateInstance(Type, Int32[]) 创建使用从零开始的索引、具有指定 Type 和维长的多维 Array。 维的长度在一个 32 位整数数组中指定。
CreateInstance(Type, Int64[]) 创建使用从零开始的索引、具有指定 Type 和维长的多维 Array。 维的长度在一个 64 位整数数组中指定。
CreateInstance(Type, Int32, Int32) 创建使用从零开始的索引、具有指定 Type 和维长的二维 Array。
CreateInstance(Type, Int32[], Int32[]) 创建具有指定下限、指定 Type 和维长的多维 Array。
CreateInstance(Type, Int32, Int32, Int32) 创建使用从零开始的索引、具有指定 Type 和维长的三维 Array。
Equals(Object) 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
Exists 确定指定数组包含的元素是否与指定谓词定义的条件匹配。
Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
Find 搜索与指定谓词所定义的条件相匹配的元素,并返回整个 Array 中的第一个匹配元素。
FindAll 检索与指定谓词定义的条件匹配的所有元素。
FindIndex(T[], Predicate) 搜索与指定谓词定义的条件匹配的元素,然后返回整个 Array 中第一个匹配项的从零开始的索引。
FindIndex(T[], Int32, Predicate) 搜索与指定谓词所定义的条件相匹配的元素,并返回 Array 中从指定索引到最后一个元素的元素范围内第一个匹配项的从零开始的索引。
FindIndex(T[], Int32, Int32, Predicate) 搜索与指定谓词所定义的条件相匹配的一个元素,并返回 Array 中从指定的索引开始、包含指定元素个数的元素范围内第一个匹配项的从零开始的索引。
FindLast 搜索与指定谓词所定义的条件相匹配的元素,并返回整个 Array 中的最后一个匹配元素。
FindLastIndex(T[], Predicate) 搜索与指定谓词定义的条件匹配的元素,然后返回整个 Array 中最后一个匹配项的从零开始的索引。
FindLastIndex(T[], Int32, Predicate) 搜索与由指定谓词定义的条件相匹配的元素,并返回 Array 中从第一个元素到指定索引的元素范围内最后一个匹配项的从零开始的索引。
FindLastIndex(T[], Int32, Int32, Predicate) 搜索与指定谓词所定义的条件相匹配的元素,并返回 Array 中包含指定元素个数、到指定索引结束的元素范围内最后一个匹配项的从零开始的索引。
ForEach 对指定数组的每个元素执行指定操作。
GetEnumerator 返回 Array 的 IEnumerator。
GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)
GetLength 获取一个 32 位整数,该整数表示 Array 的指定维中的元素数。
GetLongLength 获取一个 64 位整数,该整数表示 Array 的指定维中的元素数。
GetLowerBound 获取 Array 中指定维度的下限。
GetType 获取当前实例的 Type。 (继承自 Object。)
GetUpperBound 获取 Array 的指定维度的上限。
GetValue(Int32) 获取一维 Array 中指定位置的值。 索引指定为 32 位整数。
GetValue(Int32[]) 获取多维 Array 中指定位置的值。 索引指定为一个 32 位整数数组。
GetValue(Int64) 获取一维 Array 中指定位置的值。 索引指定为 64 位整数。
GetValue(Int64[]) 获取多维 Array 中指定位置的值。 索引指定为一个 64 位整数数组。
GetValue(Int32, Int32) 获取二维 Array 中指定位置的值。 索引指定为 32 位整数。
GetValue(Int64, Int64) 获取二维 Array 中指定位置的值。 索引指定为 64 位整数。
GetValue(Int32, Int32, Int32) 获取三维 Array 中指定位置的值。 索引指定为 32 位整数。
GetValue(Int64, Int64, Int64) 获取三维 Array 中指定位置的值。 索引指定为 64 位整数。
IndexOf(Array, Object) 搜索指定的对象,并返回整个一维 Array 中第一个匹配项的索引。
IndexOf(Array, Object, Int32) 搜索指定的对象,并返回一维 Array 中从指定索引到最后一个元素这部分元素中第一个匹配项的索引。
IndexOf(Array, Object, Int32, Int32) 搜索指定的对象,并返回一维 Array 中从指定索引开始包含指定个元素的这部分元素中第一个匹配项的索引。
IndexOf(T[], T) 搜索指定的对象,并返回整个 Array 中第一个匹配项的索引。
IndexOf(T[], T, Int32) 搜索指定的对象,并返回 Array 中从指定索引到最后一个元素这部分元素中第一个匹配项的索引。
IndexOf(T[], T, Int32, Int32) 搜索指定的对象,并返回 Array 中从指定索引开始包含指定个元素的这部分元素中第一个匹配项的索引。
Initialize 通过调用值类型的默认构造函数,初始化值类型 Array 的每一个元素。
LastIndexOf(Array, Object) 搜索指定的对象,并返回整个一维 Array 中最后一个匹配项的索引。
LastIndexOf(Array, Object, Int32) 搜索指定的对象,并返回一维 Array 中从第一个元素到指定索引这部分元素中最后一个匹配项的索引。
LastIndexOf(Array, Object, Int32, Int32) 搜索指定的对象,并返回一维 Array 中到指定索引为止包含指定个元素的这部分元素中最后一个匹配项的索引。
LastIndexOf(T[], T) 搜索指定的对象,并返回整个 Array 中最后一个匹配项的索引。
LastIndexOf(T[], T, Int32) 搜索指定的对象,并返回 Array 中从第一个元素到指定索引这部分元素中最后一个匹配项的索引。
LastIndexOf(T[], T, Int32, Int32) 搜索指定的对象,并返回 Array 中到指定索引为止包含指定个元素的这部分元素中最后一个匹配项的索引。
MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
Resize 将数组的元素数更改为指定的新大小。
Reverse(Array) 反转整个一维 Array 中元素的顺序。
Reverse(Array, Int32, Int32) 反转一维 Array 中某部分元素的元素顺序。
SetValue(Object, Int32) 将某值设置给一维 Array 中指定位置的元素。 索引指定为 32 位整数。
SetValue(Object, Int32[]) 将某值设置给多维 Array 中指定位置的元素。 索引指定为一个 32 位整数数组。
SetValue(Object, Int64) 将某值设置给一维 Array 中指定位置的元素。 索引指定为 64 位整数。
SetValue(Object, Int64[]) 将某值设置给多维 Array 中指定位置的元素。 索引指定为一个 64 位整数数组。
SetValue(Object, Int32, Int32) 将某值设置给二维 Array 中指定位置的元素。 索引指定为 32 位整数。
SetValue(Object, Int64, Int64) 将某值设置给二维 Array 中指定位置的元素。 索引指定为 64 位整数。
SetValue(Object, Int32, Int32, Int32) 将某值设置给三维 Array 中指定位置的元素。 索引指定为 32 位整数。
SetValue(Object, Int64, Int64, Int64) 将某值设置给三维 Array 中指定位置的元素。 索引指定为 64 位整数。
Sort(Array) 使用 Array 中每个元素的 IComparable 实现,对整个一维 Array 中的元素进行排序。
Sort(Array, Array) 基于第一个 Array 中的关键字,使用每个关键字的 IComparable 实现,对两个一维 Array 对象(一个包含关键字,另一个包含对应的项)进行排序。
Sort(Array, IComparer) 使用指定的 IComparer,对一维 Array 中的元素进行排序。
Sort(Array, Array, IComparer) 基于第一个 Array 中的关键字,使用指定的 IComparer,对两个一维 Array 对象(一个包含关键字,另一个包含对应的项)进行排序。
Sort(Array, Int32, Int32) 使用 Array 中每个元素的 IComparable 实现,对一维 Array 中某部分元素进行排序。
Sort(Array, Array, Int32, Int32) 基于第一个 Array 中的关键字,使用每个关键字的 IComparable 实现,对两个一维 Array 对象(一个包含关键字,另一个包含对应的项)的部分元素进行排序。
Sort(Array, Int32, Int32, IComparer) 使用指定的 IComparer,对一维 Array 的部分元素进行排序。
Sort(Array, Array, Int32, Int32, IComparer) 基于第一个 Array 中的关键字,使用指定的 IComparer,对两个一维 Array 对象(一个包含关键字,另一个包含对应的项)的部分元素进行排序。
Sort(T[]) 使用 Array 的每个元素的 IComparable 泛型接口实现,对整个 Array 中的元素进行排序。
Sort(T[], IComparer) 使用指定的 IComparer 泛型接口,对 Array 中的元素进行排序。
Sort(T[], Comparison) 使用指定的 Comparison 对 Array 中的元素进行排序。
Sort(T[], Int32, Int32) 使用 Array 的每个元素的 IComparable 泛型接口实现,对 Array 中某个元素范围内的元素进行排序。
Sort(T[], Int32, Int32, IComparer) 使用指定的 IComparer 泛型接口,对 Array 中某个元素范围内的元素进行排序。
Sort(TKey[], TValue[]) 基于第一个 Array 中的关键字,使用每个关键字的 IComparable 泛型接口实现,对两个 Array 对象(一个包含关键字,另一个包含对应的项)进行排序。
Sort(TKey[], TValue[], IComparer) 基于第一个 Array 中的关键字,使用指定的 IComparer 泛型接口,对两个 Array 对象(一个包含关键字,另一个包含对应的项)进行排序。
Sort(TKey[], TValue[], Int32, Int32) 基于第一个 Array 中的关键字,使用每个关键字的 IComparable 泛型接口实现,对两个 Array 对象(一个包含关键字,另一个包含对应的项)的部分元素进行排序。
Sort(TKey[], TValue[], Int32, Int32, IComparer) 基于第一个 Array 中的关键字,使用指定的 IComparer 泛型接口,对两个 Array 对象(一个包含关键字,另一个包含对应的项)的部分元素进行排序。
ToString 返回表示当前对象的字符串。 (继承自 Object。)
TrueForAll 确定数组中的每个元素是否都与指定谓词定义的条件匹配。

提示和注释

Array 类是支持数组的语言实现的基类。 但是,只有系统和编译器可以从 Array 类显式派生。 用户应当使用由语言提供的数组构造。

一个元素就是 Array 中的一个值。 Array 的长度是它可包含的元素总数。 Array 的秩是 Array 中的维数。 Array 中维度的下限是 Array 中该维度的起始索引,多维 Array 的各个维度可以有不同的界限。 数组最多可以有 32 个维。

重要事项

在 .NET Framework 2.0 版中,Array 类实现 System.Collections.Generic.IList、System.Collections.Generic.ICollection 和 System.Collections.Generic.IEnumerable 泛型接口。 由于实现是在运行时提供给数组的,因而对于文档生成工具不可见。 因此,泛型接口不会出现在 Array 类的声明语法中,也不会有关于只能通过将数组强制转换为泛型接口类型(显式接口实现)才可访问的接口成员的参考主题。 将某一数组强制转换为这三种接口之一时需要注意的关键一点是,添加、插入或移除元素的成员会引发 NotSupportedException。

Type 对象提供有关数组类型声明的信息。 具有相同数组类型的 Array 对象共享同一 Type 对象。

Type.IsArray 和 Type.GetElementType 可能不返回所预期的 Array 形式的结果,因为如果某个数组被强制转换为 Array 类型,则结果是对象,而非数组。 即,typeof(System.Array).IsArray 返回 false,而 typeof(System.Array).GetElementType 返回 null。

与大多数类不同,Array 提供 CreateInstance 方法,以便允许后期绑定访问,而不是提供公共构造函数。

Array.Copy 方法不仅可在同一类型的数组之间复制元素,而且可在不同类型的标准数组之间复制元素;它会自动处理强制转换。

有些方法(如 CreateInstance、Copy、CopyTo、GetValue 和 SetValue)提供接受 64 位整数作为参数的重载,以适应大容量数组。 LongLength 和 GetLongLength 返回 64 位整数,表示数组的长度。

不保证会对 Array 进行排序。 在执行需要对 Array 进行排序的操作(如 BinarySearch)之前,必须对 Array 进行排序。

不支持在本机代码中使用指针的 Array 对象,这种用法将对几种方法引发 NotSupportedException。

System.Array 类例子

下面的代码示例创建并初始化一个 Array,然后显示其属性和元素。

public class SamplesArray2{

   public static void Main()  {

      // Creates and initializes a new three-dimensional Array of type Int32.
      Array myArr = Array.CreateInstance( typeof(Int32), 2, 3, 4 );
      for ( int i = myArr.GetLowerBound(0); i <= myArr.GetUpperBound(0); i++ )
         for ( int j = myArr.GetLowerBound(1); j <= myArr.GetUpperBound(1); j++ )
            for ( int k = myArr.GetLowerBound(2); k <= myArr.GetUpperBound(2); k++ )  {
               myArr.SetValue( (i*100)+(j*10)+k, i, j, k );
            }

      // Displays the properties of the Array.
      Console.WriteLine( "The Array has {0} dimension(s) and a total of {1} elements.", myArr.Rank, myArr.Length );
      Console.WriteLine( "\tLength\tLower\tUpper" );
      for ( int i = 0; i < myArr.Rank; i++ )  {
         Console.Write( "{0}:\t{1}", i, myArr.GetLength(i) );
         Console.WriteLine( "\t{0}\t{1}", myArr.GetLowerBound(i), myArr.GetUpperBound(i) );
      }

      // Displays the contents of the Array.
      Console.WriteLine( "The Array contains the following values:" );
      PrintValues( myArr );
   }


   public static void PrintValues( Array myArr )  {
      System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "\t{0}", myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/* 
This code produces the following output.

The Array has 3 dimension(s) and a total of 24 elements.
    Length    Lower    Upper
0:    2    0    1
1:    3    0    2
2:    4    0    3
The Array contains the following values:
    0    1    2    3
    10    11    12    13
    20    21    22    23
    100    101    102    103
    110    111    112    113
    120    121    122    123
*/

继承层次结构

System.Object

System.Array

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

线程安全

此类型的公共静态(在 Visual Basic 中为 Shared)成员是线程安全的。 但不能保证任何实例成员是线程安全的。 此实现不提供 Array 的同步(线程安全)包装;但是,基于 Array 的 .NET Framework 类使用 SyncRoot 属性提供它们自己的集合同步版本。 从头到尾对一个集合进行枚举在本质上不是一个线程安全的过程。 即使一个集合已进行同步,其他线程仍可以修改该集合,这将导致枚举数引发异常。 若要在枚举过程中保证线程安全,可以在整个枚举过程中锁定集合,或者捕捉由于其他线程进行的更改而引发的异常。

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1 受以下版本支持:

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。