4

我正在使用 .NET Framework 4.0。查看 Action 的文档(http://msdn.microsoft.com/en-us/library/018hxwa8(v=vs.100).aspx),他们给出了这个将委托与 Action 进行比较的示例:

delegate void DisplayMessage(string message);

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

和:

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

但是,如何使用 Action 而不是委托来创建它?

delegate void DisplayMessage<T>(T message);

public class TestCustomDelegate
{
    public static void Main()
    {
        DisplayMessage<string> messageTarget;
        ...
    }
}

编辑:我忘记了 messageTarget 声明中的类型定义。现在添加它。

4

2 回答 2

4

您的委托与 完全相同Action<T>,但名称不同。

你可以以同样的方式使用它。

于 2013-06-21T18:16:56.313 回答
1

对于现有方法(如 DisplayMessage)

public void DisplayMessage<T>(T message)
{
    //do stuff with s
    if (message is string)
    {
        Console.WriteLine(message);
    }
}

Action<string> messageTarget = new Action<string>(DisplayMessage);
messageTarget.Invoke("Testing");  //or use beginInvoke/endInvoke

也可以使用 lambda:

Action<string> messageTarget = new Action<string>(s =>
                {
                    //do stuff with s                    
                    Console.WriteLine(s);
                });
messageTarget.Invoke("Testing");  //or use beginInvoke/endInvoke
于 2013-06-21T18:29:03.060 回答