本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

List<T>.FindIndex 方法 (Int32, Int32, Predicate<T>)

 

搜索与指定谓词所定义的条件相匹配的一个元素,并返回 List<T> 中从指定的索引开始、包含指定元素个数的元素范围内第一个匹配项的从零开始的索引。

命名空间:   System.Collections.Generic
程序集:  mscorlib(位于 mscorlib.dll)

public int FindIndex(
	int startIndex,
	int count,
	Predicate<T> match
)

参数

startIndex
Type: System.Int32

从零开始的搜索的起始索引。

count
Type: System.Int32

要搜索的部分中的元素数。

match
Type: System.Predicate<T>

Predicate<T> 委托,用于定义要搜索的元素的条件。

返回值

Type: System.Int32

如果找到与 match 定义的条件相匹配的第一个元素,则为该元素的从零开始的索引;否则为 -1。

Exception Condition
ArgumentNullException

matchnull

ArgumentOutOfRangeException

startIndex 超出了 List<T> 的有效索引范围。

- 或 -

count 小于 0。

- 或 -

startIndexcount 未在 List<T> 中指定有效部分。

List<T> 处开始向前搜索 startIndex 结束 startIndex 加上 count 减 1,如果 count 大于 0。

Predicate<T> 是返回方法的委托 true 如果将对象传递给委托中定义的条件匹配。 当前元素 List<T> 逐个传递给 Predicate<T> 委托。 委托具有签名︰

public bool methodName(T obj)

此方法执行线性搜索;因此,此方法为 O (n) 操作,其中 ncount

下面的示例定义 Employee 类有两个字段 NameId 它还定义了 EmployeeSearch 类具有单个方法 StartsWith, ,,该值指示是否 Employee.Name 字段会启动与指定的子字符串提供给 EmployeeSearch 类构造函数。 请注意此方法的签名

public bool StartsWith(Employee e)

对应于可以传递给委托的签名 FindIndex 方法。 该示例实例化 List<Employee> 对象,添加了大量 Employee objets 到它,然后调用 FindIndex(Int32, Int32, Predicate<T>) 方法两次,以在整个集合中搜索 (即,成员从索引 0 处与索引 Count -1)。 第一次,它会搜索第一个 Employee 对象,其 Name 字段开头"J"; 第二次搜索第一个 Employee 对象,其 Name 字段开头"Ju"。

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

通用 Windows 平台
自 8 起可用
.NET Framework
自 2.0 起可用
可移植类库
可移植 .NET 平台 中受支持
Windows Phone Silverlight
自 8.0 起可用
Windows Phone
自 8.1 起可用
返回页首
显示: