Esporta (0) Stampa
Espandi tutto
Espandi Riduci a icona
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Delegato Predicate<T>

Rappresenta il metodo che definisce un insieme di criteri e determina se l'oggetto specificato soddisfa tali criteri.

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

public delegate bool Predicate<in T>(
	T obj
)

Parametri di tipo

in T

Tipo di oggetto da confrontare.

Il parametro di questo tipo è controvariante. Ciò significa che è possibile utilizzare il tipo specificato o qualsiasi tipo meno derivato. Per ulteriori informazioni sulla covarianza e la controvarianza, vedere Covarianza e controvarianza nei generics.

Parametri

obj
Tipo: T
Oggetto da confrontare in base ai criteri definiti all'interno del metodo rappresentato da questo delegato.

Valore restituito

Tipo: System.Boolean
true se obj soddisfa i criteri definiti all'interno del metodo rappresentato da questo delegato; in caso contrario false.

Questo delegato è utilizzato da diversi metodi delle classi Array e List<T> per cercare elementi nell'insieme.

In genere, il delegato Predicate<T> è rappresentato da un'espressione lambda. Poiché le variabili in locale sono disponibili alle espressioni lambda, è facile eseguire il test di una condizione che non è precisamente nota in fase di compilazione. Questa situazione viene simulata nell'esempio seguente, che definisce una classe HockeyTeam contenente informazioni su un team della National Hockey League e l'anno in cui è stata fondata. Nell'esempio viene definita un array di valori interi che rappresentano gli anni e casualmente assegna un elemento dell'array a foundedBeforeYear, ovvero una variabile locale al metodo d'esempio Main. Poiché le variabili in locale sono disponibili ad un'espressione lambda, l'espressione lambda passata al metodo List<T>.FindAll può restituire un oggetto HockeyTeam per ogni team fondato in quell'anno o prima.


using System;
using System.Collections.Generic;

public class HockeyTeam
{
   private string _name;
   private int _founded;

   public HockeyTeam(string name, int year)
   {
      _name = name;
      _founded = year;
   }

   public string Name {
      get { return _name; }
   }

   public int Founded {
      get { return _founded; }
   }
}

public class Example
{
   public static void Main()
   {
      Random rnd = new Random();
      List<HockeyTeam> teams = new List<HockeyTeam>();
      teams.AddRange( new HockeyTeam[] { new HockeyTeam("Detroit Red Wings", 1926), 
                                         new HockeyTeam("Chicago Blackhawks", 1926),
                                         new HockeyTeam("San Jose Sharks", 1991),
                                         new HockeyTeam("Montreal Canadiens", 1909),
                                         new HockeyTeam("St. Louis Blues", 1967) } );
      int[] years = { 1920, 1930, 1980, 2000 };
      int foundedBeforeYear = years[rnd.Next(0, years.Length)];
      Console.WriteLine("Teams founded before {0}:", foundedBeforeYear);
      foreach (var team in teams.FindAll( x => x.Founded <= foundedBeforeYear))
         Console.WriteLine("{0}: {1}", team.Name, team.Founded);
   }
}
// The example displays output similar to the following:
//       Teams founded before 1930:
//       Detroit Red Wings: 1926
//       Chicago Blackhawks: 1926
//       Montreal Canadiens: 1909


Nell'esempio di codice riportato di seguito viene utilizzato un delegato Predicate<T> con il metodo Array.Find<T> per cercare una matrice di strutture Point. L'esempio in modo esplicito definito un delegato di Predicate<T> denominato predicate e le assegna un metodo denominato FindPoints che restituisce true se il prodotto dei campi di Point.Y e di Point.X è maggiore di 100.000. Si noti che viene eseguita normalmente utilizzare un'espressione lambda anziché definire in modo esplicito un delegato di tipo Predicate<T>, poiché il secondo esempio seguente.


using System;
using System.Drawing;

public class Example
{
   public static void Main()
   {
      // Create an array of Point structures.
      Point[] points = { new Point(100, 200), 
                         new Point(150, 250), new Point(250, 375), 
                         new Point(275, 395), new Point(295, 450) };

      // Define the Predicate<T> delegate.
      Predicate<Point> predicate = FindPoints;

      // Find the first Point structure for which X times Y  
      // is greater than 100000. 
      Point first = Array.Find(points, predicate);

      // Display the first structure found.
      Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);
   }

   private static bool FindPoints(Point obj)
   {
      return obj.X * obj.Y > 100000;
   }
}
// The example displays the following output:
//        Found: X = 275, Y = 395


L'esempio seguente è identico a quello precedente, con la differenza che utilizza un'espressione lambda per rappresentare il delegato di Predicate<T>. Ogni elemento dell'array points viene passato all'espressione lambda fino a quando l'espressione non trova un elemento che risponde ai criteri di ricerca. In questo caso, l'espressione lambda restituisce true se il prodotto dei campi X e Y è maggiore di 100.000.


using System;
using System.Drawing;

public class Example
{
   public static void Main()
   {
      // Create an array of Point structures.
      Point[] points = { new Point(100, 200), 
                         new Point(150, 250), new Point(250, 375), 
                         new Point(275, 395), new Point(295, 450) };

      // Find the first Point structure for which X times Y  
      // is greater than 100000. 
      Point first = Array.Find(points, x => x.X * x.Y > 100000 );

      // Display the first structure found.
      Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);
   }
}
// The example displays the following output:
//        Found: X = 275, Y = 395


.NET Framework

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Libreria di classi portabile

Supportato in: Libreria di classi portabile

.NET per applicazioni Windows Store

Supportato in: Windows 8

.NET per applicazioni Windows Phone

Supportato in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft