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搜尋 ,並結束於 startIndex 加count號減 1。
Predicate<T>是方法的委派,如果傳遞至該方法的物件符合委派中定義的條件,則會傳回 true 。 目前 List<T> 的專案會個別傳遞至 Predicate<T> 委派。 委派具有簽章:
public bool methodName(T obj)
Public Function methodName(obj As T) As Boolean
此方法會執行線性搜尋;因此,這個方法是 o (n) 作業,其中 n 是 count。
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 欄位 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>) 方法兩次來搜尋整個集合,第一次針對字段開頭為 “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) 作業,其中 n 是 Count。
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 欄位 Name 和 Id的類別。 它也會使用單一 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。
提交並檢視相關的意見反應