Exporter (0) Imprimer
Développer tout
Développer Réduire

Func<T1, T2, T3, TResult>, délégué

Mise à jour : novembre 2007

Encapsule une méthode ayant trois paramètres et retournant une valeur du type spécifié par le paramètre TResult.

Espace de noms :  System
Assembly :  System.Core (dans System.Core.dll)

public delegate TResult Func<T1, T2, T3, TResult>(
	T1 arg1,
	T2 arg2,
	T3 arg3
)

J# prend en charge l'utilisation d'API génériques mais pas la déclaration de nouvelles API.
JScript ne prend pas en charge les types ou les méthodes génériques.

Paramètres de type

T1

Type du premier paramètre de la méthode encapsulée par ce délégué.

T2

Type du deuxième paramètre de la méthode encapsulée par ce délégué.

T3

Type du troisième paramètre de la méthode encapsulée par ce délégué.

TResult

Type de la valeur de retour de la méthode encapsulée par ce délégué.

Paramètres

arg1
Type : T1
Premier paramètre de la méthode encapsulée par ce délégué.
arg2
Type : T2
Deuxième paramètre de la méthode encapsulée par ce délégué.
arg3
Type : T3
Troisième paramètre de la méthode encapsulée par ce délégué.

Valeur de retour

Type : TResult
Valeur de retour de la méthode encapsulée par ce délégué.

Vous pouvez utiliser ce délégué pour représenter une méthode qui peut être passée en tant que paramètre sans déclarer explicitement un délégué personnalisé. La méthode doit correspondre à la signature de méthode définie par ce délégué. Cela signifie que la méthode encapsulée doit avoir trois paramètres, chacun d'entre eux lui étant passé par valeur, et qu'elle doit retourner une valeur.

Bb549430.alert_note(fr-fr,VS.90).gifRemarque :

Pour référencer une méthode ayant trois paramètres et retournant void (ou, dans Visual Basic, qui est déclarée Sub plutôt que Function), utilisez à la place le délégué générique Action<T1, T2, T3>.

Lorsque vous utilisez le délégué Func<T1, T2, T3, TResult>, vous n'avez pas à définir explicitement un délégué qui encapsule une méthode avec trois paramètres. Par exemple, le code suivant déclare explicitement un délégué générique nommé ParseNumber et assigne une référence à la méthode Parse à son instance de délégué.

using System;
using System.Globalization;

delegate T ParseNumber<T>(string input, NumberStyles styles, 
                         IFormatProvider provider);

public class DelegateExample
{
   public static void Main()
   {
      string numericString = "-1,234";
      ParseNumber<int> parser = int.Parse;
      Console.WriteLine(parser(numericString, 
                        NumberStyles.Integer | NumberStyles.AllowThousands, 
                        CultureInfo.InvariantCulture));
   }
}


L'exemple suivant simplifie ce code en instanciant le délégué Func<T1, T2, T3, TResult> plutôt qu'en définissant explicitement un nouveau délégué avant de lui assigner une méthode nommée.

using System;
using System.Globalization;

public class GenericFunc
{
   public static void Main()
   {
      string numericString = "-1,234";
      Func<string, NumberStyles, IFormatProvider, int> parser = int.Parse;
      Console.WriteLine(parser(numericString, 
                        NumberStyles.Integer | NumberStyles.AllowThousands, 
                        CultureInfo.InvariantCulture));
   }
}


Vous pouvez utiliser le délégué Func<T1, T2, T3, TResult> avec les méthodes anonymes en C#, comme l'illustre l'exemple suivant. (Pour obtenir une introduction aux méthodes anonymes, consultez Méthodes anonymes (Guide de programmation C#).)

using System;
using System.Globalization;

public class Anonymous
{
   public static void Main()
   {
      string numericString = "-1,234";
      Func<string, NumberStyles, IFormatProvider, int> parser = 
           delegate(string s, NumberStyles sty, IFormatProvider p) 
           { return int.Parse(s, sty, p); };
      Console.WriteLine(parser(numericString, 
                        NumberStyles.Integer | NumberStyles.AllowThousands, 
                        CultureInfo.InvariantCulture));
   }
}


Vous pouvez également assigner une expression lambda à un délégué Func<T1, T2, T3, TResult>, comme l'illustre l'exemple suivant. (Pour obtenir une introduction aux expressions lambda, consultez Expressions lambda et Expressions lambda (Guide de programmation C#).)

using System;
using System.Globalization;

public class LambdaExpression
{
   public static void Main()
   {
      string numericString = "-1,234";
      Func<string, NumberStyles, IFormatProvider, int> parser = (s, sty, p)
                   => int.Parse(s, sty, p);
      Console.WriteLine(parser(numericString, 
                        NumberStyles.Integer | NumberStyles.AllowThousands, 
                        CultureInfo.InvariantCulture));
   }
}


Le type sous-jacent d'une expression lambda est l'un des délégués génériques Func. Cela permet de passer une expression lambda en tant que paramètre sans l'assigner explicitement à un délégué. Étant donné que de nombreuses méthodes de types de l'espace de noms System.Linq disposent des paramètres Func, vous pouvez notamment passer une expression lambda à ces méthodes sans instancier explicitement un délégué Func.

L'exemple suivant montre comment déclarer et utiliser un délégué Func<T1, T2, TResult>. Cet exemple déclare une variable Func<T1, T2, TResult> et lui assigne une expression lambda qui prend une valeur String et une valeur Int32 en tant que paramètres. L'expression lambda retourne true si la longueur du paramètre String est égale à la valeur du paramètre Int32. Le délégué qui encapsule cette méthode est ensuite utilisé dans une requête pour filtrer les chaînes dans un tableau de chaînes.

using System;
using System.Collections.Generic;
using System.Linq;

public class Func3Example
{
   public static void Main()
   {
      Func<String, int, bool> predicate = (str, index) => str.Length == index;

      String[] words = { "orange", "apple", "Article", "elephant", "star", "and" };
      IEnumerable<String> aWords = words.Where(predicate).Select(str => str);

      foreach (String word in aWords)
         Console.WriteLine(word);
   }
}


Windows Vista, Windows XP SP2, Windows Server 2003, Windows CE, Windows Mobile pour Smartphone, Windows Mobile pour Pocket PC

Le .NET Framework et le .NET Compact Framework ne prennent pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

.NET Framework

Pris en charge dans : 3.5

.NET Compact Framework

Pris en charge dans : 3.5

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft