public:
 int FindIndex(int startIndex, int count, Predicate<T> ^ match);
public int FindIndex (int startIndex, int count, Predicate<T> match);
member this.FindIndex : int * int * Predicate<'T> -> int
Public Function FindIndex (startIndex As Integer, count As Integer, match As Predicate(Of T)) As Integer

下列範例會定義具有兩個 Employee 欄位 Name Id 的類別。 它也會使用單一 EmployeeSearch 方法定義類別, StartsWith 指出欄位是否 Employee.Name 以提供給類別建構函式的 EmployeeSearch 指定子字串開頭。 請注意此方法的簽章

public bool StartsWith(Employee e)
Public Function StartsWith(e As Employee) As Boolean

會對應至可以傳遞至 方法之委派的 FindIndex 簽章。 此範例會具現化 List<Employee> 物件、將一些 Employee 物件加入其中,然後呼叫 FindIndex(Int32, Int32, Predicate<T>) 方法兩次來搜尋整個集合 (,也就是索引 0 到 index Count 的成員 - 1) 。 第一次,它會搜尋欄位開頭為 “J” 的第一個 Employee 物件 Name ;第二次,它會搜尋字段開頭為 “Ju” 的第一個 Employee 物件 Name

using System;
using System.Collections.Generic;
public class Employee : IComparable
   public String Name { get; set; }
   public int Id { get; set; }
   public int CompareTo(Object o )
      Employee e = o as Employee;
      if (e == null)
         throw new ArgumentException("o is not an Employee object.");
      return Name.CompareTo(e.Name);
public class EmployeeSearch
   String _s;
   public EmployeeSearch(String s)
      _s = s;
   public bool StartsWith(Employee e)
      return e.Name.StartsWith(_s, StringComparison.InvariantCultureIgnoreCase);
public class Example
   public static void Main()
      var employees = new List<Employee>();
      employees.AddRange( new Employee[] { new Employee { Name = "Frank", Id = 2 },
                                           new Employee { Name = "Jill", Id = 3 },
                                           new Employee { Name = "Dave", Id = 5 },
                                           new Employee { Name = "Jack", Id = 8 },
                                           new Employee { Name = "Judith", Id = 12 },
                                           new Employee { Name = "Robert", Id = 14 },
                                           new Employee { Name = "Adam", Id = 1 } } );
      employees.Sort();
      var es = new EmployeeSearch("J");
      Console.WriteLine("'J' starts at index {0}",
                        employees.FindIndex(0, employees.Count - 1, es.StartsWith));
      es = new EmployeeSearch("Ju");
      Console.WriteLine("'Ju' starts at index {0}",
                        employees.FindIndex(0, employees.Count - 1,es.StartsWith));
// The example displays the following output:
//       'J' starts at index 3
//       'Ju' starts at index 5
Imports System.Collections.Generic
Public Class Employee : Implements IComparable
   Public Property Name As String
   Public Property Id As Integer
   Public Function CompareTo(o As Object) As Integer _
         Implements IComparable.CompareTo
      Dim e As Employee = TryCast(o, Employee)
      If e Is Nothing Then
         Throw New ArgumentException("o is not an Employee object.")
      End If
      Return Name.CompareTo(e.Name)
   End Function
End Class
Public Class EmployeeSearch
   Dim _s As String
   Public Sub New(s As String)
      _s = s
   End Sub
   Public Function StartsWith(e As Employee) As Boolean
      Return e.Name.StartsWith(_s, StringComparison.InvariantCultureIgnoreCase)
   End Function
End Class
Module Example
   Public Sub Main()
      Dim employees As New List(Of Employee)()
      employees.AddRange( { New Employee() With { .Name = "Frank", .Id = 2 },
                            New Employee() With { .Name = "Jill", .Id = 3 },
                            New Employee() With { .Name = "Dave", .Id = 5 },
                            New Employee() With { .Name = "Jack", .Id = 8 },
                            New Employee() With { .Name = "Judith", .Id = 12 },
                            New Employee() With { .Name = "Robert", .Id = 14 },
                            New Employee() With { .Name = "Adam", .Id = 1 } } )
      employees.Sort()
      Dim es As New EmployeeSearch("J")
      Console.WriteLine("'J' starts at index {0}",
                        employees.FindIndex(0, employees.Count - 1,
                                            AddressOf es.StartsWith))
      es = New EmployeeSearch("Ju")
      Console.WriteLine("'Ju' starts at index {0}",
                        employees.FindIndex(0, employees.Count - 1,
                                            AddressOf es.StartsWith))
   End Sub
End Module
' The example displays the following output:
'       'J' starts at index 3
'       'Ju' starts at index 5
    	

List<T>如果 大於 0,count則會從 開始startIndex搜尋 ,並結束於 startIndexcount號減 1。

Predicate<T>是方法的委派,如果傳遞至該方法的物件符合委派中定義的條件,則會傳回 true 。 目前 List<T> 的專案會個別傳遞至 Predicate<T> 委派。 委派具有簽章:

public bool methodName(T obj)
Public Function methodName(obj As T) As Boolean

此方法會執行線性搜尋;因此,這個方法是 o (n) 作業,其中 ncount

int FindIndex(Predicate<T> ^ match);
public int FindIndex (Predicate<T> match);
member this.FindIndex : Predicate<'T> -> int
Public Function FindIndex (match As Predicate(Of T)) As Integer

下列範例會定義具有兩個 Employee 欄位 NameId的類別。 它也會使用單一 EmployeeSearch 方法定義類別, StartsWith指出欄位是否 Employee.Name 以提供給類別建構函式的 EmployeeSearch 指定子字串開頭。 請注意此方法的簽章

public bool StartsWith(Employee e)
Public Function StartsWith(e As Employee) As Boolean

會對應至可以傳遞至 方法之委派的 FindIndex 簽章。 此範例會具現化 List<Employee> 物件、將一些Employee物件加入其中,然後呼叫 FindIndex(Int32, Int32, Predicate<T>) 方法兩次來搜尋整個集合,第一次針對字段開頭為 “J” 的第一個Employee物件,第二次呼叫字段開頭為 “Ju” 的第一個Employee物件NameName

using System;
using System.Collections.Generic;
public class Employee : IComparable
   public String Name { get; set; }
   public int Id { get; set; }
   public int CompareTo(Object o )
      Employee e = o as Employee;
      if (e == null)
         throw new ArgumentException("o is not an Employee object.");
      return Name.CompareTo(e.Name);
public class EmployeeSearch
   String _s;
   public EmployeeSearch(String s)
      _s = s;
   public bool StartsWith(Employee e)
      return e.Name.StartsWith(_s, StringComparison.InvariantCultureIgnoreCase);
public class Example
   public static void Main()
      var employees = new List<Employee>();
      employees.AddRange( new Employee[] { new Employee { Name = "Frank", Id = 2 },
                                           new Employee { Name = "Jill", Id = 3 },
                                           new Employee { Name = "Dave", Id = 5 },
                                           new Employee { Name = "Jack", Id = 8 },
                                           new Employee { Name = "Judith", Id = 12 },
                                           new Employee { Name = "Robert", Id = 14 },
                                           new Employee { Name = "Adam", Id = 1 } } );
      employees.Sort();
      var es = new EmployeeSearch("J");
      Console.WriteLine("'J' starts at index {0}",
                        employees.FindIndex(es.StartsWith));
      es = new EmployeeSearch("Ju");
      Console.WriteLine("'Ju' starts at index {0}",
                        employees.FindIndex(es.StartsWith));
// The example displays the following output:
//       'J' starts at index 3
//       'Ju' starts at index 5
Imports System.Collections.Generic
Public Class Employee : Implements IComparable
   Public Property Name As String
   Public Property Id As Integer
   Public Function CompareTo(o As Object) As Integer _
         Implements IComparable.CompareTo
      Dim e As Employee = TryCast(o, Employee)
      If e Is Nothing Then
         Throw New ArgumentException("o is not an Employee object.")
      End If
      Return Name.CompareTo(e.Name)
   End Function
End Class
Public Class EmployeeSearch
   Dim _s As String
   Public Sub New(s As String)
      _s = s
   End Sub
   Public Function StartsWith(e As Employee) As Boolean
      Return e.Name.StartsWith(_s, StringComparison.InvariantCultureIgnoreCase)
   End Function
End Class
Module Example
   Public Sub Main()
      Dim employees As New List(Of Employee)()
      employees.AddRange( { New Employee() With { .Name = "Frank", .Id = 2 },
                            New Employee() With { .Name = "Jill", .Id = 3 },
                            New Employee() With { .Name = "Dave", .Id = 5 },
                            New Employee() With { .Name = "Jack", .Id = 8 },
                            New Employee() With { .Name = "Judith", .Id = 12 },
                            New Employee() With { .Name = "Robert", .Id = 14 },
                            New Employee() With { .Name = "Adam", .Id = 1 } } )
      employees.Sort()
      Dim es As New EmployeeSearch("J")
      Console.WriteLine("'J' starts at index {0}",
                        employees.FindIndex(AddressOf es.StartsWith))
      es = New EmployeeSearch("Ju")
      Console.WriteLine("'Ju' starts at index {0}",
                        employees.FindIndex(AddressOf es.StartsWith))
   End Sub
End Module
' The example displays the following output:
'       'J' starts at index 3
'       'Ju' starts at index 5
    	

List<T>會從第一個項目開始向前搜尋,並結束於最後一個專案。

Predicate<T>是方法的委派,如果傳遞至該方法的物件符合委派中定義的條件,則會傳回 true 。 目前 List<T> 的專案會個別傳遞至 Predicate<T> 委派。 委派具有簽章:

public bool methodName(T obj)
Public Function methodName(obj As T) As Boolean

此方法會執行線性搜尋;因此,這個方法是 o (n) 作業,其中 nCount

public:
 int FindIndex(int startIndex, Predicate<T> ^ match);
public int FindIndex (int startIndex, Predicate<T> match);
member this.FindIndex : int * Predicate<'T> -> int
Public Function FindIndex (startIndex As Integer, match As Predicate(Of T)) As Integer

下列範例會定義具有兩個 Employee 欄位 NameId的類別。 它也會使用單一 EmployeeSearch 方法定義類別, StartsWith指出欄位是否 Employee.Name 以提供給類別建構函式的 EmployeeSearch 指定子字串開頭。 請注意此方法的簽章

public bool StartsWith(Employee e)
Public Function StartsWith(e As Employee) As Boolean

會對應至可以傳遞至 方法之委派的 FindIndex 簽章。 此範例會具現化 物件、將一些Employee物件加入其中,然後呼叫 FindIndex(Int32, Int32, Predicate<T>) 方法兩次,從其第五個List<Employee>成員開始搜尋集合 (,也就是索引 4) 的成員。 第一次,它會搜尋欄位開頭為 “J” 的第一個 Employee 物件 Name ;第二次,它會搜尋字段開頭為 “Ju” 的第一個 Employee 物件 Name

using System;
using System.Collections.Generic;
public class Employee : IComparable
   public String Name { get; set; }
   public int Id { get; set; }
   public int CompareTo(Object o )
      Employee e = o as Employee;
      if (e == null)
         throw new ArgumentException("o is not an Employee object.");
      return Name.CompareTo(e.Name);
public class EmployeeSearch
   String _s;
   public EmployeeSearch(String s)
      _s = s;
   public bool StartsWith(Employee e)
      return e.Name.StartsWith(_s, StringComparison.InvariantCultureIgnoreCase);
public class Example
   public static void Main()
      var employees = new List<Employee>();
      employees.AddRange( new Employee[] { new Employee { Name = "Frank", Id = 2 },
                                           new Employee { Name = "Jill", Id = 3 },
                                           new Employee { Name = "Dave", Id = 5 },
                                           new Employee { Name = "Jack", Id = 8 },
                                           new Employee { Name = "Judith", Id = 12 },
                                           new Employee { Name = "Robert", Id = 14 },
                                           new Employee { Name = "Adam", Id = 1 } } );
      employees.Sort();
      var es = new EmployeeSearch("J");
      int index = employees.FindIndex(4, es.StartsWith);
      Console.WriteLine("Starting index of'J': {0}",
                        index >= 0 ? index.ToString() : "Not found");
      es = new EmployeeSearch("Ju");
      index = employees.FindIndex(4, es.StartsWith);
      Console.WriteLine("Starting index of 'Ju': {0}",
                        index >= 0 ? index.ToString() : "Not found");
// The example displays the following output:
//       'J' starts at index 4
//       'Ju' starts at index 5
Imports System.Collections.Generic
Public Class Employee : Implements IComparable
   Public Property Name As String
   Public Property Id As Integer
   Public Function CompareTo(o As Object) As Integer _
         Implements IComparable.CompareTo
      Dim e As Employee = TryCast(o, Employee)
      If e Is Nothing Then
         Throw New ArgumentException("o is not an Employee object.")
      End If
      Return Name.CompareTo(e.Name)
   End Function
End Class
Public Class EmployeeSearch
   Dim _s As String
   Public Sub New(s As String)
      _s = s
   End Sub
   Public Function StartsWith(e As Employee) As Boolean
      Return e.Name.StartsWith(_s, StringComparison.InvariantCultureIgnoreCase)
   End Function
End Class
Module Example
   Public Sub Main()
      Dim employees As New List(Of Employee)()
      employees.AddRange( { New Employee() With { .Name = "Frank", .Id = 2 },
                            New Employee() With { .Name = "Jill", .Id = 3 },
                            New Employee() With { .Name = "Dave", .Id = 5 },
                            New Employee() With { .Name = "Jack", .Id = 8 },
                            New Employee() With { .Name = "Judith", .Id = 12 },
                            New Employee() With { .Name = "Robert", .Id = 14 },
                            New Employee() With { .Name = "Adam", .Id = 1 } } )
      employees.Sort()
      Dim es As New EmployeeSearch("J")
      Dim index As Integer = employees.FindIndex(4, AddressOf es.StartsWith)        
      Console.WriteLine("Starting index of'J': {0}",
                        If(index >= 0, index.ToString(), "Not found"))
      es = New EmployeeSearch("Ju")
      index = employees.FindIndex(4, AddressOf es.StartsWith) 
      Console.WriteLine("Starting index of'Ju': {0}",
                        If(index >= 0, index.ToString(), "Not found"))
   End Sub
End Module
' The example displays the following output:
'       'J' starts at index 4
'       'Ju' starts at index 5
    	

List<T>會從 最後startIndex一個元素開始和結束搜尋。

Predicate<T>是方法的委派,如果傳遞至該方法的物件符合委派中定義的條件,則會傳回 true 。 目前 List<T> 的專案會個別傳遞至 Predicate<T> 委派。 委派具有簽章:

public bool methodName(T obj)
Public Function methodName(obj As T) As Boolean

此方法會執行線性搜尋;因此,此方法是 O (n) 作業,其中 n 是 從 startIndex 到 結尾的項目 List<T>數目。

即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:https://aka.ms/ContentUserFeedback

提交並檢視相關的意見反應