Exporter (0) Imprimer
Développer tout
Développer Réduire
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

Func<T, TResult>, délégué

Encapsule une méthode ayant un seul paramètre et retournant 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 T, out TResult>(
	T arg
)

Paramètres de type

in T

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

Ce paramètre de type est contravariant. Autrement dit, vous pouvez utiliser le type que vous avez spécifié ou tout type moins dérivé. Pour plus d'informations sur la covariance et la contravariance, consultez Covariance et contravariance dans les génériques.

out TResult

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

Ce paramètre de type est covariant. Autrement dit, vous pouvez utiliser le type que vous avez spécifié ou tout type plus dérivé. Pour plus d'informations sur la covariance et la contravariance, consultez Covariance et contravariance dans les génériques.

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

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 lui est passé par valeur, et qu'elle ne doit pas retourner de valeur.

RemarqueRemarque

Pour référencer une méthode ayant un paramètre 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<T>.

Lorsque vous utilisez le délégué Func<T, TResult>, vous n'avez pas à définir explicitement un délégué qui encapsule une méthode avec un seul paramètre. Par exemple, le code suivant déclare explicitement un délégué nommé ConvertMethod et assigne une référence à la méthode UppercaseString à 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 délégué Func<T, TResult> plutôt qu'en définissant explicitement un nouveau délégué avant de lui assigner une méthode nommée.


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

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 assigner une expression lambda à un délégué Func<T, TResult>, comme l'illustre l'exemple suivant. (Pour obtenir une introduction aux expressions lambda, consultez Expressions lambda (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 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<T, TResult>, vous pouvez notamment passer une expression lambda à ces méthodes sans instancier explicitement un délégué Func<T, TResult>.

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


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
*/


.NET Framework

Pris en charge dans : 4.5.2, 4.5.1, 4.5, 4, 3.5

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Bibliothèque de classes portable

Pris en charge dans : Bibliothèque de classes portable

.NET pour les applications du Windows Store

Pris en charge dans : Windows 8

.NET pour les applications Windows Phone

Pris en charge dans : 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 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

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

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft