Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo List<T>.FindIndex (Int32, Int32, Predicate<T>)

 

Data di pubblicazione: ottobre 2016

Cerca un elemento che soddisfi le condizioni definite dal predicato specificato e restituisce l'indice in base zero della prima occorrenza all'interno dell'intervallo di elementi nell'oggetto List<T> che inizia dall'indice specificato e contiene il numero indicato di elementi.

Spazio dei nomi:   System.Collections.Generic
Assembly:  mscorlib (in mscorlib.dll)

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

Parametri

startIndex
Type: System.Int32

Indice iniziale in base zero della ricerca.

count
Type: System.Int32

Numero di elementi nella sezione in cui eseguire la ricerca.

match
Type: System.Predicate<T>

Delegato Predicate<T> che definisce le condizioni dell'elemento da cercare.

Valore restituito

Type: System.Int32

Indice in base zero della prima occorrenza di un elemento che corrisponde alle condizioni definite da match, se presente; in caso contrario, –1.

Exception Condition
ArgumentNullException

match è null.

ArgumentOutOfRangeException

startIndex non è compreso nell'intervallo di indici validi per List<T>.

-oppure-

count è minore di 0.

-oppure-

startIndex e count non specificano una sezione valida in List<T>.

Il List<T> viene eseguita la ricerca in avanti a partire da startIndex e di fine in startIndex plus count -1, se count è maggiore di 0.

Il Predicate<T> è un delegato a un metodo che restituisce true Se l'oggetto passato al corrisponde alle condizioni definite nel delegato. Gli elementi dell'oggetto List<T> vengono passati singolarmente per il Predicate<T> delegare. Il delegato ha la firma:

public bool methodName(T obj)

Questo metodo esegue una ricerca lineare. Pertanto, questo metodo è un'operazione O (n) operazione, in cui n è count.

L'esempio seguente definisce un Employee classe con due campi, Name e Id. Definisce inoltre un EmployeeSearch classe con un singolo metodo, StartsWith, che indica se il Employee.Name campo inizia con una sottostringa specificata che viene fornita per il EmployeeSearch costruttore della classe. Si noti la firma del metodo

public bool StartsWith(Employee e)

corrisponde alla firma del delegato che può essere passato per il FindIndex metodo. Nell'esempio viene creata un'istanza di un List<Employee> di oggetto, aggiunge il numero di Employee oggetti, e quindi chiama il FindIndex(Int32, Int32, Predicate<T>) metodo due volte per cercare l'intera raccolta (, ovvero i membri dall'indice 0 all'indice Count - 1). La prima volta, viene cercato il primo Employee i cui Name campo inizia con "J"; la seconda volta, viene cercato il primo Employee i cui Name campo inizia con "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

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 2.0
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Windows Phone Silverlight
Disponibile da 8.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: