Expand Minimize
本主題尚未接受評分 - 為這個主題評分

Action<T> 委派

更新:2007 年 11 月

封裝採用單一參數且沒有傳回值的方法。

命名空間:  System
組件:  mscorlib (在 mscorlib.dll 中)
public delegate void Action<T>(
	T obj
)

J# 支援使用泛型 API,但不支援新 API 的宣告。
JScript 不支援泛型型別或方法。

型別參數

T

這個委派所封裝之方法的參數型別。

參數

obj
型別:T
這個委派所封裝之方法的參數。

您可以使用這個委派以傳遞做為參數的方法,而不必明確宣告自訂委派。這個方法必須對應於這個委派所定義的方法簽章。這表示封裝方法必須有一個以值傳入的參數,而且不可傳回值。(在 C# 中,此方法必須傳回 void。在 Visual Basic 中,它必須由 SubEnd Sub 建構所定義)。一般而言,這種方法是用於執行作業。

018hxwa8.alert_note(zh-tw,VS.90).gif注意事項:

若要參考有一個參數並傳回值的方法,可使用泛型 Func<T, TResult> 委派代替。

當您使用 Action<T> 委派時,不需要明確定義以一個參數封裝方法的委派。例如,下列程式碼明確宣告名為 DisplayMessage 的委派,並指派 WriteLine 方法或 ShowWindowsMessage 方法的參考給它的委派執行個體。

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);      
   }
}


下列範例是藉由對 Action<T> 委派執行個體化,而不是明確定義新委派並為其指派具名方法,以簡化這個程式碼。

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);      
   }
}


您也可以用 C# 中的匿名方法,使用 Action<T> 委派,如下列範例所示。(如需匿名方法的簡介,請參閱匿名方法 (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);      
   }
}


您也可以將 Lambda 運算式指派給 Action<T> 委派執行個體,如下列範例所示。(如需 lambda 運算式的簡介,請參閱 Lambda 運算式 (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);      
   }
}


018hxwa8.alert_note(zh-tw,VS.90).gif注意事項:

Visual Basic 要求 Lambda 運算式傳回一個值。因此,在 Visual Basic 中 Action<T> 委派無法與 Lambda 運算式搭配使用。

ForEachForEach<T> 方法各自接受一個 Action<T> 委派做為參數。由委派所封裝的方法,可讓您對陣列或清單中的每個項目執行動作。下列範例使用 ForEach 方法以提供示範。

下列範例示範如何使用 Action<T> 委派來列印 List<T> 物件的內容。這個範例使用 Print 方法,將清單的內容顯示到主控台 (Console) 中。此外,C# 範例還示範如何使用匿名方法將內容顯示到主控台。

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


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360

.NET Framework 和 .NET Compact Framework 並不支援各種平台的所有版本。如需支援平台版本的相關資訊,請參閱 .NET Framework 系統需求

.NET Framework

支援版本:3.5、3.0、2.0

.NET Compact Framework

支援版本:3.5、2.0

XNA Framework

支援版本:2.0、1.0
本文對您有任何幫助嗎?
(剩餘 1500 個字元)

社群新增項目

新增
© 2013 Microsoft. 著作權所有,並保留一切權利。