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

Action<T1, T2, T3> délégué

 

Date de publication : novembre 2016

Encapsule une méthode ayant trois paramètres et ne retournant aucune valeur.

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

public delegate void Action<in T1, in T2, in T3>(
	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é.

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

Vous pouvez utiliser la Action<T1, T2, T3> délégué à passer à une méthode 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 sont passés par valeur, et il ne doit pas retourner une valeur. (En c#, la méthode doit retourner void. En Visual Basic, elle doit être définie par le Sub... End Sub construire. Il peut également être une méthode qui retourne une valeur qui est ignorée.) En règle générale, une telle méthode est utilisée pour effectuer une opération.

System_CAPS_noteRemarque

Pour référencer une méthode ayant trois paramètres et retournant une valeur, utilisez le type générique Func<T1, T2, T3, TResult> déléguer à la place.

Lorsque vous utilisez la Action<T1, T2, T3> 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é nommé StringCopy et assigne une référence à la CopyStrings méthode à son instance de délégué.

using System;

delegate void StringCopy(string[] stringArray1, 
                         string[] stringArray2, 
                         int indexToStart);

public class TestDelegate
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth"};
      string[] copiedOrdinals = new string[ordinals.Length];           
      StringCopy copyOperation = CopyStrings;
      copyOperation(ordinals, copiedOrdinals, 3);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(String.IsNullOrEmpty(ordinal) ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target, int startPos)
   {
      if (source.Length != target.Length) 
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= source.Length - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }

}

L’exemple suivant simplifie ce code en instanciant le Action<T1, T2, T3> 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 TestAction3
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth"};
      string[] copiedOrdinals = new string[ordinals.Length];           
      Action<string[], string[], int> copyOperation = CopyStrings;
      copyOperation(ordinals, copiedOrdinals, 3);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(String.IsNullOrEmpty(ordinal) ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target, int startPos)
   {
      if (source.Length != target.Length) 
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= source.Length - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}

Vous pouvez également utiliser le Action<T1, T2, T3> 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 TestAnon
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth"};
      string[] copiedOrdinals = new string[ordinals.Length];           
      Action<string[], string[], int> copyOperation = delegate(string[] s1, 
                                                               string[] s2, 
                                                               int pos) 
                                      { CopyStrings(s1, s2, pos); };
      copyOperation(ordinals, copiedOrdinals, 3);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(String.IsNullOrEmpty(ordinal) ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target, int startPos)
   {
      if (source.Length != target.Length) 
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= source.Length - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}

Vous pouvez également affecter une expression lambda à une Action<T1, T2, T3> déléguer l’instance, comme l’illustre l’exemple suivant. (Pour une introduction aux expressions lambda, consultez Expressions lambda (Guide de programmation C#).)

using System;

public class TestLambda
{
   public static void Main()
   {
      string[] ordinals = {"First", "Second", "Third", "Fourth", "Fifth"};
      string[] copiedOrdinals = new string[ordinals.Length];           
      Action<string[], string[], int> copyOperation = (s1, s2, pos) =>
                                      CopyStrings(s1, s2, pos); 
      copyOperation(ordinals, copiedOrdinals, 3);
      foreach (string ordinal in copiedOrdinals)
         Console.WriteLine(ordinal == string.Empty ? "<None>" : ordinal);
   }

   private static void CopyStrings(string[] source, string[] target, int startPos)
   {
      if (source.Length != target.Length) 
         throw new IndexOutOfRangeException("The source and target arrays must have the same number of elements.");

      for (int ctr = startPos; ctr <= source.Length - 1; ctr++)
         target[ctr] = String.Copy(source[ctr]);
   }
}

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: