Esporta (0) Stampa
Espandi tutto
Espandi Riduci a icona
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Delegato Action<T>

Incapsula un metodo che ha un unico parametro e non restituisce alcun valore.

Spazio dei nomi:  System
Assembly:  mscorlib (in mscorlib.dll)

public delegate void Action<in T>(
	T obj
)

Parametri di tipo

in T

Il tipo del parametro del metodo che questo delegato incapsula.

Il parametro di questo tipo è controvariante. Ciò significa che è possibile utilizzare il tipo specificato o qualsiasi tipo meno derivato. Per ulteriori informazioni sulla covarianza e la controvarianza, vedere Covarianza e controvarianza nei generics.

Parametri

obj
Tipo: T
Il parametro del metodo che questo delegato incapsula.

È possibile utilizzare Action<T> delegato per passare un metodo come parametro senza dichiarare in modo esplicito un delegato personalizzato. Il metodo incapsulate deve corrispondere alla firma del metodo che viene definita dal delegato. Ciò significa che il metodo incapsulate necessario disporre di un parametro passato per valore e non deve restituire un valore. (In c#, il metodo deve restituire void. In Visual Basic, deve essere definito da SubEnd Sub costrutto. Può essere un metodo che restituisce un valore che verrà ignorato.) In genere, tale metodo viene utilizzato per eseguire un'operazione.

NotaNota

Per fare riferimento a un metodo con un parametro e restituisce un valore, utilizzare l'oggetto generico Func<T, TResult> delegato anziché.

Quando si utilizzano Action<T> delegato, non è necessario definire in modo esplicito un delegato che incapsula un metodo con un singolo parametro. Ad esempio, il codice seguente in modo esplicito dichiara un delegato denominato DisplayMessage e assegna un riferimento peruna o l'altra WriteLine metodo o ShowWindowsMessage metodo nella relativa istanza del delegato.


using System;
using System.Windows.Forms;

delegate void DisplayMessage(string message);

public class TestCustomDelegate
{
   public static void Main()
   {
      DisplayMessage messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");   
   }      

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}


L'esempio seguente consente di semplificare questo codice consente di creare un'istanza Action<T> delegato anziché in modo esplicito la definizione del delegato nuovo e assegnando un metodo denominato.


using System;
using System.Windows.Forms;

public class TestAction1
{
   public static void Main()
   {
      Action<string> messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");   
   }      

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}


È inoltre possibile utilizzare Action<T> il delegato a metodi anonimi in c#, come nell'esempio seguente. (Per un'introduzione ai metodi anonimi, vedere Metodi anonimi (Guida per programmatori C#)).


using System;
using System.Windows.Forms;

public class TestAnonMethod
{
   public static void Main()
   {
      Action<string> messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = delegate(string s) { ShowWindowsMessage(s); };
      else
         messageTarget = delegate(string s) { Console.WriteLine(s); };

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}


È anche possibile assegnare un'espressione lambda a Action<T> l'istanza del delegato, come nell'esempio seguente. (Per un'introduzione alle espressioni lambda, vedere Espressioni lambda (Guida per programmatori C#)).


using System;
using System.Windows.Forms;

public class TestLambdaExpression
{
   public static void Main()
   {
      Action<string> messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = s => ShowWindowsMessage(s); 
      else
         messageTarget = s => Console.WriteLine(s);

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}


ForEach e ForEach<T> i metodi accettano ogni Action<T> delegato come parametro. Il metodo incapsulate dal delegato consente di eseguire un'azione su ogni elemento della matrice o nell'elenco. Nell'esempio viene utilizzato ForEach metodo per fornire un'illustrazione.

Nell'esempio seguente viene illustrato l'utilizzo di Action<T> delegato per stampare il contenuto di un oggetto List<T> oggetto. in questo esempio, Print il metodo viene utilizzato per visualizzare il contenuto dell'elenco nella console. Inoltre, l'esempio in c# viene inoltre illustrato l'utilizzo dei metodi anonimi visualizzare il contenuto nella console. Si noti che nell'esempio in modo esplicito non dichiara Action<T> variabile. Invece, viene passato un riferimento a un metodo che accetta un singolo parametro e che non restituisce un valore a List<T>.ForEach metodo, che unico parametro è Action<T> delegato. Analogamente, nell'esempio in c#, Action<T> il delegato in modo esplicito non viene creata un'istanza perché la firma del metodo anonimo corrisponde alla firma di Action<T> delegare previsto da List<T>.ForEach metodo.


using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<String> names = new List<String>();
        names.Add("Bruce");
        names.Add("Alfred");
        names.Add("Tim");
        names.Add("Richard");

        // Display the contents of the list using the Print method.
        names.ForEach(Print);

        // The following demonstrates the anonymous method feature of C#
        // to display the contents of the list to the console.
        names.ForEach(delegate(String name)
        {
            Console.WriteLine(name);
        });
    }

    private static void Print(string s)
    {
        Console.WriteLine(s);
    }
}
/* This code will produce output similar to the following:
 * Bruce
 * Alfred
 * Tim
 * Richard
 * Bruce
 * Alfred
 * Tim
 * Richard
 */


.NET Framework

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Libreria di classi portabile

Supportato in: Libreria di classi portabile

.NET per applicazioni Windows Store

Supportato in: Windows 8

.NET per applicazioni Windows Phone

Supportato in: 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 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2014 Microsoft