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<T, TResult> délégué

 

Date de publication : novembre 2016

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

Pour parcourir le code source de .NET Framework pour ce type, consultez la Reference Source.

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

public delegate TResult Func<in T, out TResult>(
	T arg
)

Paramètres

arg
Type: T

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

inT

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

System_CAPS_noteRemarque

Pour afficher le code source de .NET Framework pour ce type, consultez la Reference Source. Vous pouvez parcourir le code source en ligne, télécharger la référence de consultation hors connexion et parcourir les sources (y compris les correctifs et mises à jour) pendant le débogage ; see instructions.

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 un paramètre qui est passé par valeur, et qu’elle doit retourner une valeur.

System_CAPS_noteRemarque

Référence à une méthode qui a un paramètre et retourne void (ou en Visual Basic, qui est déclaré comme un Sub plutôt que comme un Function), utiliser le type générique Action<T> déléguer à la place.

Lorsque vous utilisez la Func<T, TResult> délégué, vous n’avez pas à définir explicitement un délégué qui encapsule une méthode avec un paramètre unique. Par exemple, le code suivant déclare explicitement un délégué nommé ConvertMethod et assigne une référence à la UppercaseString méthode à son instance de délégué.

using System;

delegate string ConvertMethod(string inString);

public class DelegateExample
{
   public static void Main()
   {
      // Instantiate delegate to reference UppercaseString method
      ConvertMethod convertMeth = UppercaseString;
      string name = "Dakota";
      // Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMeth(name));
   }

   private static string UppercaseString(string inputString)
   {
      return inputString.ToUpper();
   }
}

L’exemple suivant simplifie ce code en instanciant le Func<T, 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;

public class GenericFunc
{
   public static void Main()
   {
      // Instantiate delegate to reference UppercaseString method
      Func<string, string> convertMethod = UppercaseString;
      string name = "Dakota";
      // Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMethod(name));
   }

   private static string UppercaseString(string inputString)
   {
      return inputString.ToUpper();
   }
}

Vous pouvez également utiliser le Func<T, 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;

public class Anonymous
{
   public static void Main()
   {
      Func<string, string> convert = delegate(string s)
         { return s.ToUpper();}; 

      string name = "Dakota";
      Console.WriteLine(convert(name));   
   }
}

Vous pouvez également affecter une expression lambda à une Func<T, TResult> délégué, 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;

public class LambdaExpression
{
   public static void Main()
   {
      Func<string, string> convert = s => s.ToUpper();

      string name = "Dakota";
      Console.WriteLine(convert(name));   
   }
}

Le type sous-jacent d’une expression lambda est un des générique Func délégués. Cela rend possible de passer une expression lambda en tant que paramètre sans lui assigner explicitement à un délégué. En particulier, car de nombreuses méthodes de types dans les System.Linq ont de l’espace de noms Func<T, TResult> paramètres, vous pouvez passer ces méthodes une expression lambda sans instancier explicitement un Func<T, TResult> déléguer.

L’exemple suivant montre comment déclarer et utiliser un Func<T, TResult> déléguer. Cet exemple déclare un Func<T, TResult> variable et lui assigne une expression lambda qui convertit les caractères dans une chaîne en majuscules. Le délégué qui encapsule cette méthode est ensuite passé à la Enumerable.Select<TSource, TResult> méthode pour modifier les chaînes dans un tableau de chaînes en majuscules.

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

static class Func
{
   static void Main(string[] args)
   {
      // Declare a Func variable and assign a lambda expression to the  
      // variable. The method takes a string and converts it to uppercase.
      Func<string, string> selector = str => str.ToUpper();

      // Create an array of strings.
      string[] words = { "orange", "apple", "Article", "elephant" };
      // Query the array and select strings according to the selector method.
      IEnumerable<String> aWords = words.Select(selector);

      // Output the results to the console.
      foreach (String word in aWords)
         Console.WriteLine(word);
   }
}      
/*
This code example produces the following output:

   ORANGE
   APPLE
   ARTICLE
   ELEPHANT
*/

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: