Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

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

 

Date de publication : novembre 2016

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

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

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

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é.

Paramètres de type

inT1

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

inT2

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

inT3

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

outTResult

Type de la 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 encapsulée 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 est passé par valeur, et qu’elle doit retourner une valeur.

System_CAPS_noteRemarque

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

Lorsque vous utilisez la Func<T1, T2, T3, TResult> délégué, 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 Parse méthode à 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 la Func<T1, T2, T3, TResult> délégué au lieu de définir un nouveau délégué et lui assigner une méthode nommée explicitement.

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 la Func<T1, T2, T3, TResult> délégué avec les méthodes anonymes en c#, comme l’illustre l’exemple suivant. (Pour 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 affecter une expression lambda à une Func<T1, T2, T3, TResult> déléguer, comme l’illustre l’exemple suivant. (Pour une introduction aux expressions lambda, consultez Lambda Expressions (Visual Basic) 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 un des génériques Func délégués. Cela rend possible de passer une expression lambda en tant que paramètre sans l’assigner explicitement à un délégué. En particulier, car de nombreuses méthodes de types dans le System.Linq espace de noms Func paramètres, vous pouvez passer ces méthodes une expression lambda sans instancier explicitement un Func déléguer.

L’exemple suivant montre comment déclarer et utiliser un Func<T1, T2, TResult> déléguer. Cet exemple déclare une Func<T1, T2, TResult> variable et lui assigne une expression lambda qui prend un String valeur et un Int32 valeur en tant que paramètres. L’expression lambda retourne true Si la longueur de la String paramètre est égal à la valeur de le Int32 paramètre. 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);
   }
}

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 3.5
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: