信息
您所需的主题如下所示。但此主题未包含在此库中。

Array 类

2013/12/13

提供一些方法,用于创建、处理、搜索数组并对数组进行排序,从而充当公共语言运行时中所有数组的基类。

Namespace:  System
程序集:  mscorlib(位于 mscorlib.dll 中)

public abstract class Array : IList, 
	ICollection, IEnumerable, IStructuralComparable, IStructuralEquatable

Array 类型公开以下成员。

  名称说明
公共属性IsFixedSize获取一个值,该值指示 Array 是否具有固定大小。
公共属性IsReadOnly获取一个值,该值指示 Array 是否为只读。
公共属性IsSynchronized获取一个值,该值指示是否同步对 Array 的访问(线程安全)。
公共属性Length获取一个 32 位整数,该整数表示 Array 的所有维数中的元素总数;如果数组中没有元素,则该值为零。
公共属性Rank获取 Array 的从零开始的秩(维数)。
公共属性SyncRoot获取可用于同步对 Array 的访问的对象。
返回顶部

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

  名称说明
公共扩展方法AsQueryableIEnumerable 转换为 IQueryable (由 Queryable 定义。)
公共扩展方法Cast<TResult>IEnumerable 的元素转换为指定的类型。 (由 Enumerable 定义。)
公共扩展方法OfType<TResult>根据指定类型筛选 IEnumerable 的元素。 (由 Enumerable 定义。)
返回顶部

  名称说明
显式接口实现私有属性ICollection.Count获取 Array 中包含的元素数。
显式接口实现私有方法IList.Add实现 IList.Add。在任何情况下均引发 NotSupportedException
显式接口实现私有方法IList.ClearArray 中的所有元素设置为零、falsenull,具体取决于元素类型。
显式接口实现私有方法IList.Contains确定某元素是否在 Array 中。
显式接口实现私有方法IList.IndexOf搜索指定的对象,并返回当前一维实例中第一个匹配项的索引。
显式接口实现私有方法IList.Insert实现 IList.Insert。在任何情况下均引发 NotSupportedException
显式接口实现私有属性IList.Item获取或设置位于指定索引处的元素。
显式接口实现私有方法IList.Remove实现 IList.Remove。在任何情况下均引发 NotSupportedException
显式接口实现私有方法IList.RemoveAt实现 IList.RemoveAt。在任何情况下均引发 NotSupportedException
显式接口实现私有方法IStructuralComparable.CompareTo确定当前集合对象在排序顺序中的位置是位于另一个对象之前、之后还是与其位置相同。
显式接口实现私有方法IStructuralEquatable.Equals确定某个对象与当前实例是否相等。
显式接口实现私有方法IStructuralEquatable.GetHashCode返回当前实例的哈希代码。
返回顶部

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

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

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

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

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

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

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

下面的代码示例说明 Array.Copy 如何在 integer 类型的数组和 Object 类型的数组之间复制元素。

说明注意:

有关如何编译和运行此示例代码的信息,请参见生成具有静态 Windows Phone TextBlock 控件的示例


using System;
public class Example
{
    public static void Demo(System.Windows.Controls.TextBlock outputBlock)
    {

        // Creates and initializes a new integer array and a new Object array.
        int[] myIntArray = new int[5] { 1, 2, 3, 4, 5 };
        Object[] myObjArray = new Object[5] { 26, 27, 28, 29, 30 };

        // Prints the initial values of both arrays.
        outputBlock.Text += String.Format("Initially:") + "\n";
        outputBlock.Text += "integer array:";
        PrintValues(outputBlock, myIntArray);
        outputBlock.Text += "Object array: ";
        PrintValues(outputBlock, myObjArray);

        // Copies the first two elements from the integer array to the Object array.
        Array.Copy(myIntArray, myObjArray, 2);

        // Prints the values of the modified arrays.
        outputBlock.Text += String.Format("\nAfter copying the first two elements of the integer array to the Object array,") + "\n";
        outputBlock.Text += "integer array:";
        PrintValues(outputBlock, myIntArray);
        outputBlock.Text += "Object array: ";
        PrintValues(outputBlock, myObjArray);

        // Copies the last two elements from the Object array to the integer array.
        Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2);

        // Prints the values of the modified arrays.
        outputBlock.Text += String.Format("\nAfter copying the last two elements of the Object array to the integer array,") + "\n";
        outputBlock.Text += "integer array:";
        PrintValues(outputBlock, myIntArray);
        outputBlock.Text += "Object array: ";
        PrintValues(outputBlock, myObjArray);
    }


    public static void PrintValues(System.Windows.Controls.TextBlock outputBlock, Object[] myArr)
    {
        foreach (Object i in myArr)
        {
            outputBlock.Text += String.Format("   {0}", i);
        }
        outputBlock.Text += "\n";
    }

    public static void PrintValues(System.Windows.Controls.TextBlock outputBlock, int[] myArr)
    {
        foreach (int i in myArr)
        {
            outputBlock.Text += String.Format("   {0}", i);
        }
        outputBlock.Text += "\n";
    }
    /* 
    This code produces the following output.

    Initially,
    integer array:  1       2       3       4       5
    Object array:   26      27      28      29      30

    After copying the first two elements of the integer array to the Object array,
    integer array:  1       2       3       4       5
    Object array:   1       2       28      29      30

    After copying the last two elements of the Object array to the integer array,
    integer array:  1       2       3       29      30
    Object array:   1       2       28      29      30
    */
}



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


public class Example2
{

    public static void Demo(System.Windows.Controls.TextBlock outputBlock)
    {
        // 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.
        outputBlock.Text += String.Format("The Array has {0} dimension(s) and a total of {1} elements.", myArr.Rank, myArr.Length) + "\n";
        outputBlock.Text += "  Length  Lower  Upper" + "\n";
        for (int i = 0; i < myArr.Rank; i++)
        {
            outputBlock.Text += String.Format("{0}:  {1}", i, myArr.GetLength(i));
            outputBlock.Text += String.Format("  {0}  {1}", myArr.GetLowerBound(i), myArr.GetUpperBound(i)) + "\n";
        }

        // Displays the contents of the Array.
        outputBlock.Text += "The Array contains the following values:" + "\n";
        PrintValues(outputBlock, myArr);
    }


    public static void PrintValues(System.Windows.Controls.TextBlock outputBlock, 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
            {
                outputBlock.Text += "\n";
                i = 1;
            }
            outputBlock.Text += String.Format("   {0}", myEnumerator.Current);
        }
        outputBlock.Text += "\n";
    }
}


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

此类型的所有公共静态(在 Visual Basic 中为 Shared)成员都是线程安全的。但不保证所有实例成员都是线程安全的。

此实现不提供 Array 的同步(线程安全)包装;但是,基于 Array 的 .NET Framework 类使用 SyncRoot 属性提供它们自己的集合同步版本。

从头到尾对一个集合进行枚举在本质上不是一个线程安全的过程。即使一个集合已进行同步,其他线程仍可以修改该集合,这将导致枚举数引发异常。若要在枚举过程中保证线程安全,可以在整个枚举过程中锁定集合,或者捕捉由于其他线程进行的更改而引发的异常。

显示: