System.Array.IndexOf 方法 (Array, Object, Int32)

方法描述

搜索指定的对象,并返回一维 Array 中从指定索引到最后一个元素这部分元素中第一个匹配项的索引。

语法定义(C# System.Array.IndexOf 方法 (Array, Object, Int32) 的用法)

public static int IndexOf(
	Array array,
	Object value,
	int startIndex
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
array System-Array 要搜索的一维 Array。
value System-Object 要在 array 中查找的对象。
startIndex System-Int32 搜索的起始索引。空数组中 0(零)为有效值。
返回值 System.Int32 如果在 array 中从 startIndex 到最后一个元素这部分元素中第一个与 value 匹配的项的索引;否则为该数组的下限减 1。

提示和注释

向前搜索一维 Array,从 startIndex 开始,到最后一个元素结束。

使用 Object.Equals 方法,将元素与指定的值进行比较。 如果元素类型是非内部(用户定义)类型,则使用该类型的 Equals 实现。

由于大多数数组以零作为下限,在找不到 value 时,此方法通常将返回 -1。 在极少数情况下,数组的下限等于 Int32.MinValue,且找不到 value,这时此方法返回 Int32.MaxValue,即 System.Int32.MinValue - 1。

将数组的 Length 作为 startindex 传递会产生返回值 -1;传递大于 Length 的值会引发 ArgumentOutOfRangeException。

此方法的运算复杂度为 O(n),其中 n 是从 startIndex 到 array 末尾这一范围所包含的元素数目。

在 .NET Framework 2.0 版中,此方法使用 Array 的 Equals 和 CompareTo 方法来确定由 value 参数指定的 Object 是否存在。 在早期版本的 .NET Framework 中,这是通过使用 Equals 和 valueObject 本身的 CompareTo 方法来确定的。

System.Array.IndexOf 方法 (Array, Object, Int32)例子

下面的代码示例显示如何确定指定元素的第一个匹配项的索引。

using System;
public class SamplesArray  {

   public static void Main()  {

      // Creates and initializes a new Array with three elements of the same value.
      Array myArray=Array.CreateInstance( typeof(String), 12 );
      myArray.SetValue( "the", 0 );
      myArray.SetValue( "quick", 1 );
      myArray.SetValue( "brown", 2 );
      myArray.SetValue( "fox", 3 );
      myArray.SetValue( "jumps", 4 );
      myArray.SetValue( "over", 5 );
      myArray.SetValue( "the", 6 );
      myArray.SetValue( "lazy", 7 );
      myArray.SetValue( "dog", 8 );
      myArray.SetValue( "in", 9 );
      myArray.SetValue( "the", 10 );
      myArray.SetValue( "barn", 11 );

      // Displays the values of the Array.
      Console.WriteLine( "The Array contains the following values:" );
      PrintIndexAndValues( myArray );

      // Searches for the first occurrence of the duplicated value.
      String myString = "the";
      int myIndex = Array.IndexOf( myArray, myString );
      Console.WriteLine( "The first occurrence of \"{0}\" is at index {1}.", myString, myIndex );

      // Searches for the first occurrence of the duplicated value in the last section of the Array.
      myIndex = Array.IndexOf( myArray, myString, 4 );
      Console.WriteLine( "The first occurrence of \"{0}\" between index 4 and the end is at index {1}.", myString, myIndex );

      // Searches for the first occurrence of the duplicated value in a section of the Array.
      myIndex = Array.IndexOf( myArray, myString, 6, 5 );
      Console.WriteLine( "The first occurrence of \"{0}\" between index 6 and index 10 is at index {1}.", myString, myIndex );
   }


   public static void PrintIndexAndValues( Array myArray )  {
      for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
         Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }
}
/*
This code produces the following output.

The Array contains the following values:
    [0]:    the
    [1]:    quick
    [2]:    brown
    [3]:    fox
    [4]:    jumps
    [5]:    over
    [6]:    the
    [7]:    lazy
    [8]:    dog
    [9]:    in
    [10]:    the
    [11]:    barn
The first occurrence of "the" is at index 0.
The first occurrence of "the" between index 4 and the end is at index 6.
The first occurrence of "the" between index 6 and index 10 is at index 6.
*/

异常

异常 异常描述
ArgumentNullException array 为 null。
ArgumentOutOfRangeException startIndex 超出了 array 的有效索引范围。
RankException array 是多维的。

命名空间

namespace: System

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

版本信息

.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 系统要求。